prolog 中的错误"illegal variable type for this position "



我试图搜索具有此属性的动物,但我有一个错误"此位置的非法变量类型"。如何解决?

domains
type=symbol
object=symbol
property=symbol
value=symbol
parent=symbol
predicates
nondeterm is_a(type, parent) 
nondeterm has_prop(object, property, value) 
nondeterm has_property(object, property, value) 
clauses
is_a(dog,wolf).
is_a(dingo,wolf).
is_a(wolf,volki).
is_a(coyote,volki).
is_a(jackal,volki).
is_a(volki,dogs).
is_a(fox,dogs).
is_a(arctic_fox,dogs).
has_prop(dogs, travel, walk). 
has_prop(dogs, food_for_child, milk).  
has_prop(volki, size, medium). 
has_prop(volki, color, brown). 
has_prop(arctic_fox, color, white). 
has_prop(arctic_fox, size, small). 
has_prop(fox, color, orange). 
has_prop(fox, size, small). 
has_prop(wolf, color, grey). 
has_prop(wolf, size, large). 
has_prop(dog, color, brown). 
has_prop(dog, size, small). 
has_prop(dingo, color, orange). 
has_prop(dingo, size, medium). 

has_property(Object, Property, Value):-
has_prop(Object, Property, Value). 
has_property(Object, Property, Value):-
is_a(Object,Parent), 
has_property(Parent, Property, Value).
goal
has_property(X,size,medium).

我在这一行有一个错误"此位置的非法变量类型":

is_a(Object,Parent), 

很抱歉,我没有Visual Prolog可供测试,所以我真的不确定解决方案,但我认为问题是,您应该明确domainspredicates元素是ground术语。所以我建议要么让它们小写,要么用连字符括起来,否则它们就是变量:

domains
type=symbol
object=symbol
...
predicates
is_a(type, parent) 
...

domains
'Type'=symbol
'Object'=symbol
...
predicates
is_a('Type', 'Parent') 
...

编辑

若您有可用的SWI Prolog,只需从文件的开头注释掉包含的domains即可。或者看看SWISH上的这个笔记本。

问题出在类型和变量上。我删除域并使用简单类型。

右侧代码:

predicates
nondeterm is_a(symbol, symbol) 
nondeterm has_prop(symbol, symbol, symbol) 
nondeterm has_property(symbol, symbol, symbol) 
clauses
is_a(dog,wolf).
is_a(dingo,wolf).
is_a(wolf,volki).
is_a(coyote,volki).
is_a(jackal,volki).
is_a(volki,dogs).
is_a(fox,dogs).
is_a(arctic_fox,dogs).
has_prop(dogs, travel, walk). 
has_prop(dogs, food_for_child, milk).  
has_prop(volki, size, medium). 
has_prop(volki, color, brown). 
has_prop(arctic_fox, color, white). 
has_prop(arctic_fox, size, small). 
has_prop(fox, color, orange). 
has_prop(fox, size, small). 
has_prop(wolf, color, grey). 
has_prop(wolf, size, large). 
has_prop(dog, color, brown). 
has_prop(dog, size, small). 
has_prop(dingo, color, orange). 
has_prop(dingo, size, medium). 

has_property(O, Property, Value):-
has_prop(O, Property, Value). 
has_property(O, Property, Value):-
is_a(O,Parent), 
has_property(Parent, Property, Value).
goal
has_property(X,size,medium).