2013-01-17 202 views
3

下面的代碼在SWI-Prolog的運行:爲什麼foreach只循環一次?

?-foreach(member(X ,["1","2","3"]) ,(number_codes(Y,X),writeln(Y))). 
1 
false. 

?- foreach(member(X ,["1","2","3"]) ,writeln(X)). 
[49] 
[50] 
[51] 

回答

2

foreach/2是更復雜的是forall,並且你打在所使用的可變量化有差別的情況。嘗試改爲

?- forall(member(X, ["1","2","3"]), (number_codes(Y,X), writeln(Y))). 
1 
2 
3 

true。

似乎foreach/2保留了Y的綁定。