【发布时间】:2013-10-25 23:03:40
【问题描述】:
我想知道一个 Prolog 可能包含这样的内置调用:
accum(generator, filter, accumulator)
Calculates all solutions to generator.
For each one, if filter can be proved, accumulator is proved.
Backtracks to find all solutions to filter and generator.
Accumulator may backtrack internally, but multiple proofs of accumulator are
conjoined, not backtracked.
因此,例如,在不使用递归的情况下对列表求和:
X is 0, accum(member(Val,List), True, X is X + Val).
是否有任何具有此构造的 Prolog 或等价物?请记住,我是 Prolog 的新手,可能会遗漏一些明显的东西。
【问题讨论】:
-
在 Mercury 中,人们只需编写一个名为 accum 的谓词来执行此操作。但是,您不能将目标用作参数(正如您在问题中所做的那样),您必须改用 lambda。
-
@PaulBone 结果取决于计算生成器的所有解决方案。所以,最终,仍然需要从 Mercury 的
solutions模块调用某些东西,除非您想使用非逻辑功能(在这种情况下,副词“简单地”不适用;))。