2013-04-16 32 views
0

學習Erlang的第2天。我正在嘗試通過創建一個簡單的map函數來學習在Erlang中使用Map的基本知識,該函數接受任何謂詞和列表(由用戶傳入),並檢查謂詞是否返回true或false並將結果存儲在列表中。Erlang地圖的基本示例

因此,如果用戶通過在(> 3)作謂語和該列表包含[3,4,5]期望的輸出將是[false, true, true]

這是我的嘗試:

applyMap (P, LST) -> lists:map(P LST). 

我明白如何做到這一點的任何建議。

非常感謝提前!

+0

你試過什麼錯?我想你希望你的謂詞是這樣的:'fun(x) - > x> 3 end''。 – squiguy

+0

感謝您的回覆。我的執行語法錯誤。什麼是X?你從哪裏得到的?注意:謂詞由用戶傳入。 – AnchovyLegend

+0

我不是專家,但我想你想傳遞一個匿名函數,比如'list:map(fun(Val) - > Val> 3 end,LST)。'這會返回'[false,true,true]'' 。 – squiguy

回答

2

我想你只是在lists:map的電話中錯過了PLST之間的,。試試這個:

applyMap (P, LST) -> lists:map(P, LST). 

如果在匿名函數fun(X) -> X > 3 end傳遞給您的applyMap,你應該把你所需的輸出。

例子:

applyMap (fun(X) -> X > 3 end, LST). 
+0

+1,感謝您的回覆。當用戶調用applyMap並傳遞arduments時,你能顯示函數調用會是什麼樣的嗎?我在Erlang中如何傳入謂詞或任何函數感到困惑? – AnchovyLegend

+0

感謝您的回覆。因此,如果模塊名稱是'functions',那麼您的方法是謂詞可以傳遞給函數applyMap的唯一方法? '函數:applyMap(fun(X) - > X> 3 end,[1,2,3])''我們不能像'functions:applyMap(> 3,[1,2,3])那樣做。 '? – AnchovyLegend

+0

您可以將函數分配給一個變量,例如'Pred = fun(X) - > X> 3 end.',然後調用'functions:applyMap(Pred,[1,2,3])。'。謂詞必須是一個函數。 –

0

有兩個問題:第一,你少PLST之間的逗號,但第二,你不能使用哈斯克爾式咖喱功能,如(> 3)。 Erlang中的lists:map((> 3), [1,2,3])不正確。

在Haskell中,(> 3)\n -> n > 3的咖喱形式。在Erlang中,你必須明確寫出:

lists:map(fun(N) -> N > 3 end, [2,4,6])