Prolog继承规则
要确定动物是斗牛犬,我有以下谓词:Prolog继承规则,prolog,Prolog,要确定动物是斗牛犬,我有以下谓词: bulldog(X):- body(X,muscular), weight(X,heavy), face(X,wrinkled), nose(X,pushed-in). 如果我有一条狗,就叫它“菲菲”,并告诉我以下事实: body(fifi,muscular). weight(fifi,heavy). face(fifi,wrinkled). nose(fifi,pushed-in). 当我输入以下语句时: bulldog(
bulldog(X):-
body(X,muscular),
weight(X,heavy),
face(X,wrinkled),
nose(X,pushed-in).
如果我有一条狗,就叫它“菲菲”,并告诉我以下事实:
body(fifi,muscular).
weight(fifi,heavy).
face(fifi,wrinkled).
nose(fifi,pushed-in).
当我输入以下语句时:
bulldog(fifi).
它会变成现实
现在让我们假设我有另一个斗牛犬“fofo”和以下谓词:
bulldog(fofo).
当我问这样的问题时
body(fofo,muscular). / weight(fofo,heavy).
然后它将返回false。如何让Prolog识别牛头犬的特征并返回true?您必须在知识库中添加关于
fofofo
的额外事实。Prolog做了一个,这意味着任何不能从程序中列出的事实/规则中证明的东西都是假的。你写的是,如果某个东西是肌肉发达的、沉重的、皱巴巴的、被推入的,那么它就是一只牛头犬,但不是,如果某个东西是一只牛头犬,那么它就是肌肉发达的、沉重的、被推入时皱巴巴的
要做到这一点,你可以写:
body(X,muscular):-
bulldog(X).
等等
但是,如果您有:
body(X,muscular):-
bulldog(X).
bulldog(X):-
body(X,muscular),
....
你会陷入一个无限循环。
您可以使用不同的谓词名称来解决此问题:
body(X,muscular):-
bulldog(X).
is_bulldog(X):-
body(X,muscular),
....
或者以某种方式检测循环并停止它(一些prolog版本,如XSB支持tabling)