说我在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中做到这一点?
答案 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.