gpt4 book ai didi

prolog - 如何验证序言文件子句数据库中是否存在规则

转载 作者:行者123 更新时间:2023-12-05 00:09:31 25 4
gpt4 key购买 nike

我正在完成一项大学作业,我必须验证当前子句数据库中是否存在某个子句(作为事实或作为规则)。

这个想法是使用一个规则,其头部是 verify(+name, +arguments)。如果数据库中存在另一个头部为 name(arguments) 的规则,则此规则应为真

任何帮助将不胜感激...

最佳答案

使用 call/1 不是一个好主意,因为 call/1 实际上调用了目标,但您只想找出事实/规则是否存在,并且您不想在调用可能触发的长时间计算之后等待,而您不想如果被调用的规则反过来调用例如writeln/1 。此外,即使调用失败,您也希望 verify/2 成功(但事实/规则不存在)。

作为解决方案,SWI-Prolog 提供 callable/1

callable(+Term)

True if Term is bound to an atom or a compound term,
so it can be handed without type-error to call/1, functor/3 and =../2.

这里有两个版本的 verify/2 ,一个使用 call/1 ,另一个使用 callable/1
verify1(Name, Arguments) :-
Term =.. [Name | Arguments],
call(Term).

verify2(Name, Arguments) :-
Term =.. [Name | Arguments],
callable(Term).

father(abraham, isaac) :-
writeln('hello').

father(abraham, adam) :-
fail.

关于prolog - 如何验证序言文件子句数据库中是否存在规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/321974/

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