2012-02-12 15 views
0

我知道,標題很爛...不知道如何解釋我在問什麼,所以如何處理一些代碼?模式匹配在一個匿名有趣的謂詞閉包變量

的設置:

L = [1,2,3,4,5,6,7,8,9]. 
X = 5. 
Y = 10. 

這裏是我現在在做什麼:

lists:any(fun(Z) when Z == X -> true; (_) -> false end, L). => true 
lists:any(fun(Z) when Z == Y -> true; (_) -> false end, L). => false 

我希望做的是這樣的事情SANS保護聲明(我不知道爲什麼,只是好奇,如果它是可能的。

我想知道你是否可以做這樣的事情(是的,我知道有趣的頭中有X使局部作用域變量):

lists:any(fun(X) -> true; (_) -> false end, L). 

回答

7

這尤其是一個可以寫成:

lists:any(fun(Z) -> Z =:= X end, L). 
+0

謝謝,學習這個功能範例正在擊敗我的命令...... – joshperry 2012-02-12 19:36:50

4

要回答你的主要問題:這是不可能的。在有趣的子句中,所有變量都被認爲是新的,並且會影響環境中現有的任何綁定。您必須使用警衛來將捕獲的變量與參數變量進行匹配。