2010-11-15 62 views
0

我正试图在Mathematica中创建用户定义的Map[]函数版本,并且遇到了一些问题。在Mathematica中修改Map函数的用户定义版本?

这是我到目前为止有:

map[x_, s_List] := mapAux[x, s, {}]; 
mapAux[x, s, {}] := Append[{}, First[s]]; 
mapAux[x, Rest[s], {}]; 

我试图用它作为

map[# + 1 &, {3, 6, 8}] 

但是这给输出旁边有一个神秘的错误:

Rest::normal: Nonatomic expression expected at position 1 in Rest[s]. 

mapAux[#1 + 1 &, {3, 6, 8}, {}] 

理想的结果是{4,7,9}。我研究了“Nonatomic expression”错误,我不确定它的含义。我通过一个清单,但它只是爆炸!

+3

你可能会发现我以前的答案(和它的评论)或多或少完全相同的问题信息:[http://stackoverflow.com/q/4126874/272923](http://stackoverflow。 com/q/4126874/272923) – 2010-11-15 06:38:00

+1

我不知道有些老师是否收集地图克隆 – 2010-11-15 11:35:28

+2

@belisarius我不知道学生是否因为没有显示足够的Google-fu而失败? – Simon 2010-11-15 13:21:43

回答

1

你没有通过sx作为变量,所以它只是看到s(这是一个原子表达式)而不是一个列表。您的定义需要为mapAux[x_, s_, {}]:=...,这将使xs取得传递参数的值。

+0

谢谢!我修正了这个问题,但现在只是输出其中一个列表项,如{3},甚至没有添加它。附件是否需要修复? – jackRAY 2010-11-15 06:00:09

+2

好吧,你永远不会将x应用到First [s],所以它所做的只是将s的第一个元素附加到空列表并返回它。你没有做任何迭代或应用程序。 – m42a 2010-11-15 06:10:11

+0

@jackRAY,这已被回答。你应该看看:http://stackoverflow.com/q/4126874/272923。 – rcollyer 2010-11-15 17:47:37