gpt4 book ai didi

prolog - Prolog的任何版本都支持累加器的高阶抽象吗?

转载 作者:行者123 更新时间:2023-12-04 13:51:01 25 4
gpt4 key购买 nike

我想知道一个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的新手,可能会遗漏一些明显的内容。

最佳答案

SWI-Prolog library(aggregate)具有强大的界面,例如

aggregate_all(sum(Val), member(Val,List), Sum)

使用谓词 foreach/2获得(显然很简单)在聚合和生成之间共享变量,您可能会感兴趣。

在SWI-Prolog中,您可以执行 ?- edit(library(aggregate)).来研究内部结构...

库(聚合)效率相对较低,但与SWI-Prolog nb_(不可回溯)数据结构相结合,应该可以很好地完成其工作...

关于不可回溯的数据结构: here是我的“自建”累加器的一个示例,它是通过 nb_setarg/3实现的。

关于prolog - Prolog的任何版本都支持累加器的高阶抽象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com