在Prolog中使用带有不同/不存在事实的OR运算符

Lai*_*kus 3 prolog rule fact

我有一个事实:

loves(romeo, juliet).
Run Code Online (Sandbox Code Playgroud)

然后我有'或'规则:

dances(juliet) :- loves(romeo, juliet).
dances(juliet) :- dancer(juliet).
Run Code Online (Sandbox Code Playgroud)

你可以看到舞者的事实不存在,但这应该没有问题,舞蹈(juliet)应该让我真实.相反,它让我回归真实,然后抛出一个关于舞者事实的例外异常.有没有办法为不存在的事实或规则编写规则?我是否需要检查事实是否存在?

mat*_*mat 5

要实现"如果不存在则失败",您可以使用该指令  声明谓词动态dynamic/1.

例如:

:- dynamic dancer/1.

如果将此指令添加到程序中,则会得到:

?- dances(X).
X = juliet .

并没有错误.