2013-01-17 160 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的绑定。