次のコードは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]
次のコードは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]
foreach / 2はforallよりも複雑であり、使用される変数の定量化が違いを生む場合があります。代わりに試してください
?- forall(member(X, ["1","2","3"]), (number_codes(Y,X), writeln(Y))).
1
2
3
本当。
foreach/2はのバインディングを保持しているようですY
。