当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何验证prolog文件子句数据库中是否存在规则》经验,为你挑选了1个好方法。

我正在进行大学任务,我必须验证当前子句数据库中是否存在某个子句(作为事实或规则).

我们的想法是使用头部为verify的规则(+ name,+ arguments).如果在数据库中存在另一个头部为name(arguments)的规则,则此规则应为true

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



1> Kaarel..:

使用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.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有