prolog - 为什么foreach只循环一次?

标签 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]

最佳答案

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

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

是的。

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

关于prolog - 为什么foreach只循环一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14374676/

相关文章:

list - 如何在Prolog中检查一个列表的所有元素是否都是另一个列表的成员

prolog - SWI序言: Cannot Define New Operator

prolog - 经典农夫、狼、山羊、白菜生产体系构建

Prolog,我应该如何将列表列表构造为单个列表?

prolog - 与其他语言相比,使用Prolog有什么优势?

list - Prolog 语言中的大小过程

prolog - 在 Prolog 中定义避免算术错误 is/2 的规则

prolog - Prolog中的合一算法

prolog - 获取查询的进一步解决方案

prolog - 在 SWI-Prolog 中访问和爬取文件系统