Prolog-是否满足以下查询?

时间:2018-10-24 18:57:49

标签: prolog

我正在根据以下link

做运动

这是知识库:

house_elf(dobby). 
witch(hermione). 
witch(’McGonagall’). 
witch(rita_skeeter). 
magic(X):-  house_elf(X). 
magic(X):-  wizard(X). 
magic(X):-  witch(X).

我希望以下查询返回true:

?-  magic(’McGonagall’).

但是,我在Windows 7上的SWI-Prolog(AMD64,多线程,版本7.6.4)返回以下内容:

ERROR: Stream user_input:450:4 Syntax error: Unexpected end of clause
?- magic('McGonagall').
ERROR: Undefined procedure: wizard/1
ERROR: In:
ERROR:    [9] wizard('McGonagall')
ERROR:    [8] magic('McGonagall') at c:/users/some_user/google drive/projects/nlp/prolog/code/ex2_2.pl:6
ERROR:    [7] <user>
   Exception: (9) wizard('McGonagall') ? creep
   Exception: (8) magic('McGonagall') ? creep
?- 

为什么会失败?

1 个答案:

答案 0 :(得分:2)

magic/1谓词中,您调用wizard/1,这是定义的:

magic(X):-  house_elf(X). 
magic(X):-  wizard(X).
magic(X):-  witch(X).

结果是Prolog错误,因为它调用了未定义的谓词。

例如,您可以定义一个wizard/1谓词,表示总是失败:

% a world without wizards (if you do not specify extra wizards)
wizard(_) :- fail.

或使用向导填充您的“世界”,例如:

wizard(dumbledore).
wizard(remus_lupin).
%% ...