【发布时间】:2014-02-27 05:34:20
【问题描述】:
最近进入 Prolog,我一直在使用它完成一些简单的任务,并开始想知道如何在 forall 循环中使用 member,如下面的简单示例中的那个:
forall(member(A,[1,2,3,4]), print(A)).
在你做这样的事情的情况下,forall 是否总是会在每次调用时以相同的顺序处理列表中的元素?是否必须通过执行以下操作来强制执行:
A = [1,2,3,4], sort(A, B), forall(member(C,B), print(C)).
根据我最初所做的少量研究,我猜测它归结为 member/2 的行为,但 SWI-Prolog 网站上的函数文档非常简短。然而,它确实提到了关于 member/2 的确定性,这让我意识到我可能是在正确的道路上说它总是以相同的顺序提取元素,尽管我还不确定。
谁能给我任何关于这个的保证或解释?
【问题讨论】:
-
我认为你可以依赖它,因为 Prolog 列表是单链接的,任何其他遍历都会表现得更差。我当然看不出与首先命名列表有任何语义差异。
标签: prolog swi-prolog iso-prolog