为什么foreach只循环一次?

时间:2013-01-17 08:14:56

标签: prolog

以下代码在SWI-Prolog中运行:

?-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]

1 个答案:

答案 0 :(得分:2)

foreach / 2比forall更复杂,并且您遇到了使用的变量量化产生影响的情况。尝试改为

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

真。

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