gpt4 book ai didi

multithreading - Prolog 查找所有路径实现

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

我的任务是在 Prolog 中实现一个 findall 版本,除了 not 和 cut 之外,不使用任何 Prolog 内置函数——所以基本上是纯 Prolog。

我正在尝试搜索所有直接后代的树并将结果返回到列表中

parent(a, b).
parent(b, c).
parent(b, d).
parent(e, d).

到目前为止我所拥有的是:
find(X, L) :- find2(X, [], L).
find2(X, Acc, L) :- parent(Y, X), find2(Y, [Y|Acc], L).
find2(_, Acc, Acc).

例如,当我输入时我想得到什么:
find(a,X).

将是:
X = [b, c, d]

(顺序不重要)

然而,我得到了:
X = [b, c] ;
X = [b, d] ;
X = [b] ;
X = [].

我是 Prolog 的新手,因此我们将不胜感激。

谢谢

最佳答案

除了随时断言数据之外,您还可以使用额外的逻辑谓词,例如 nb_setarg/3 .然后,一旦找到父节点,您就可以通过 nb_setarg 故障返回并找到另一个父节点。之前找到的所有解决方案都应保留在 nb_setarg 上的术语中,然后在所有结果都用尽后,nb_setarg 术语就是答案。 SWI-Prolog 示例很好,但它只是一个计数器。尝试使用随您进行构建的列表(或更好的是:差异列表)来执行此操作。

关于multithreading - Prolog 查找所有路径实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7647758/

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