2012-02-12 2 views
0

私は知っている、タイトルが吸う...私が求めていることを説明する方法がわからないので、コードはどうですか?匿名のfun述語のclosure変数のパターンマッチング

設定:ここでは

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 

私が何をしたいのですがどのような(私は知らないGUARD文はsansこのようなものですなぜなら、それが可能かどうか不思議なだけです。

私はあなたがこのようなことをすることができるかどうか疑問に思っています(はい、私は楽しい頭の中でXを使ってローカルスコープの変数を作ります):

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

答えて

7

この特定の1は、のように書くことができます:あなたの主な質問に答えるために

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

おかげさまで、この機能的なパラダイムが私からの命令を打ち負かしています... – joshperry

4

:それは不可能です。 fun節の先頭では、すべての変数は新しいものとみなされ、環境内の既存のバインディングをシャドーします。キャプチャされた変数とパラメータ変数を照合するにはガードを使用する必要があります。

関連する問題