默认情况下的Prolog查询缺少值

时间:2019-07-26 01:18:31

标签: prolog logic-programming

说我在Prolog中有以下数据库。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

现在,我希望能够搜索别名,但是在没有可用别名的情况下,将默认名称恢复为默认名称。

例如。获得

person(fred).
person(bob).
person(alice).

alias(fred,"Frederick the Great").
alias(bob,"Spongey").

后退

我的第一次尝试是为别名谓词添加另一个子句。

fred, "Frederick the Great"
bob, "Spongey"
alice, alice

但这给了我

alias(X,X).

但是当有别名可用时,我不希望使用非别名版本。

我该如何在Prolog中做到这一点?

2 个答案:

答案 0 :(得分:0)

好。

我已经解决了:

person(fred).
person(bob).
person(alice).

alias(fred,"Frederick the Great").
alias(bob,"Spongey").

name(X,Y) :- 
  alias(X,Y). 

name(X,X) :-
  person(X),
  not(alias(X,_)).

答案 1 :(得分:0)

您可以为此使用条件,而无需定义其他规则或使用not\+

?- person(X),
   (   alias(X, Y)
   *-> true
   ;   X = Y
   ).
X = fred,
Y = "Frederick the Great" ;
X = bob,
Y = "Spongey" ;
X = Y, Y = alice.