2010-11-15 36 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