Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 序言中的胡佛俱乐部_Prolog_Logic - Fatal编程技术网

Prolog 序言中的胡佛俱乐部

Prolog 序言中的胡佛俱乐部,prolog,logic,Prolog,Logic,我非常肯定我所宣布的事实,包括: hoof(tony). hoof(tim). hoof(ellen). hoof(X) :- skier(X); climber(X). not(likes(X, rain)) :- climber(X). likes(X, snow) :- skier(X). likes(tony, X) :- \+likes(ellen, X). likes(ellen, X) :- \+likes(tony, X). likes(tony, rain). likes

我非常肯定我所宣布的事实,包括:

hoof(tony).
hoof(tim).
hoof(ellen).


hoof(X) :- skier(X); climber(X).
not(likes(X, rain)) :- climber(X).
likes(X, snow) :- skier(X).

likes(tony, X) :- \+likes(ellen, X).
likes(ellen, X) :- \+likes(tony, X).
likes(tony, rain).
likes(tony, snow).
当我尝试用蹄子(X)、攀岩者(X)、滑雪者(X)进行查询时,,它返回一条错误消息:

uncaught exception: error(existence_error(procedure,climber/1),top_level/0)

这里缺少什么?

您没有任何用于
climper/1
的子句,因此Prolog运行时不知道谓词。因此,查询的谓词存在错误。一种可能的解决方案是将
skier/1
climper/1
等谓词声明为动态的:


此指令向运行时声明谓词,通知它可以在运行时修改谓词。这将使您的查询失败,而不是引发异常。

@LeeMerlas只需在源文件的顶部添加该指令即可。它现在可以工作,但它应该输出“Ellen”,但其输出“no”定义
not/1却很麻烦!
:- dynamic([climber/1, skier/1]).