请问同时定义这两个函数问题在哪
mathematica吧
全部回复
仅看楼主
level 1
Sylvanashe 楼主
Clear@"Global`*"
{fib, luc} :=
Table[
If[
IntegerQ@#,
Which[
# == 1, 1,
# == 2, i,
# > 2,
#0[#
- 2] +
#0[#
- 1],
# < 1,
#0[#
+ 2] -
#0[#
+ 1]
]
] &,
{i, {1, 3}}]
fib /@ Range[-10, 10]
luc /@ Range[-10, 10]
2019年04月06日 11点04分 1
吧务
level 15
一个更简单的能重现顶楼问题的例子:
{a, b} := c
这背后的计算机制说实话我没仔细研究过,文档里貌似也没详述。但是,考虑到=和:=都是为各种表达式添加各种Value用的,这个警告似乎不难理解:形如{a,b}:={c,d}的代码应该只是一种语法糖,尽管SetDelayed有HoldAll属性,在式子左端为列表的时候,它大概依旧会通过自动计算把表达式转化成类似{a:=c, b:=d}的形式。(再强调一次,这段没有任何证据,仅为猜测。)
LZ不妨去Stackexchange问问。
2019年04月06日 12点04分 2
我觉得不是{a,b}={c,d}赋值的问题,而是纯函数有问题 Clear@"Global`*" {a1, b1} = Table[
# - i &, {i, 2}] {a2, b2} = #
- Range@2 & {a11@x_, b11@x_} = Table[x - i, {i, 2}] {a22@x_, b22@x_} = x - Range@2 第二行Table的局部变量i没有带进去 第三行又出现顶楼的问题
2019年04月07日 13点04分
level 1
Sylvanashe 楼主
我觉得不是{a,b}={c,d}赋值的问题,而是纯函数有问题
Clear@"Global`*"
{a1, b1} = Table[# - i &, {i, 2}]
{a2, b2} = # - Range@2 &
{a11@x_, b11@x_} = Table[x - i, {i, 2}]
{a22@x_, b22@x_} = x - Range@2
第二行Table的局部变量i没有带进去,第三行又出现顶楼的问题
2019年04月07日 13点04分 3
第三行和2楼是一个理由,因为纯函数内部不会自动计算,所以 # - Range@2 &在结构上和等号左边对不上。第2行其实是另一个问题,这里的重点是Table是使用Block进行局部化的,而纯函数又有HoldAll属性,所以i虽然在Table内部暂时获得了值,却没有计算为该值。总之你试下这个: Table[Hold@i, {i, 2}]
2019年05月04日 08点05分
1