gpt4 book ai didi

prolog - 关于多代理论证的简单 Prolog 实现

转载 作者:行者123 更新时间:2023-12-04 05:12:08 26 4
gpt4 key购买 nike

逻辑编程 (Prolog) 的新手。遇到一个简单的问题,但不知道如何在序言中对其进行编码。

问题就像你有几个论点:argument(a),argument(b)...,还有几个攻击关系,比如attack(a,b),这意味着论点a攻击论点b。所以给出一个论点,我想知道它是否是一个有根据的论点。论点 a 的“接地”意味着如果 b 攻击 a,则存在另一个论点,例如 c 攻击 b。如果没有论证攻击 c,那么我们说 a 和 c 是有根据的。

你能举例说明如何实现这个grounded/1程序来实现这个目标。

不确定我说清楚了....但欢迎提供任何建议(或代码)!!

最佳答案

我从你的解释中了解到,当没有其他有根据的论点攻击它时,一个论点就是有根据的。

您可以定义一个过程 grounded/1在序言中直接遵守此规则:

grounded(A):-
argument(A), % A is an argument
\+ % for which there does not exist
(
attack(B, A), % an attacker
grounded(B) % which is grounded
).

[OP评论后编辑]:
如果您必须处理循环,那么您可能需要保留访问过的“攻击”列表,没有禁止循环:
grounded(A):-
grounded(A, []).


grounded(A, L):-
argument(A),
\+
(
attack(B, A),
\+ member(B, L), % Here we forbid cycles
grounded(B, [A|L]) % We add the current argument to the list of forbidden arguments
).

关于prolog - 关于多代理论证的简单 Prolog 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772892/

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