序言中的错误 "illegal variable type for this position "
Error "illegal variable type for this position " in 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).
我在这一行有一个错误 "illegal variable type for this position ":
is_a(Object,Parent),
抱歉,我没有可用于测试的 Visual Prolog,所以我不太确定解决方案,但我认为问题在于您应该明确 domains
和 predicates
元素是 ground 项。
所以我建议要么让它们小写,要么用连字符括起来,否则它们是 variables:
domains
type=symbol
object=symbol
...
predicates
is_a(type, parent)
...
或
domains
'Type'=symbol
'Object'=symbol
...
predicates
is_a('Type', 'Parent')
...
编辑
如果您有可用的 SWI-Prolog,只需注释掉文件开头到 domains
包含的内容。或者在 SWISH 上查看 this notebook。
问题出在类型和变量上。我删除域并使用简单类型。
正确的代码:
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).
我试着搜索动物,谁有这个属性,但是我有一个错误"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).
我在这一行有一个错误 "illegal variable type for this position ":
is_a(Object,Parent),
抱歉,我没有可用于测试的 Visual Prolog,所以我不太确定解决方案,但我认为问题在于您应该明确 domains
和 predicates
元素是 ground 项。
所以我建议要么让它们小写,要么用连字符括起来,否则它们是 variables:
domains
type=symbol
object=symbol
...
predicates
is_a(type, parent)
...
或
domains
'Type'=symbol
'Object'=symbol
...
predicates
is_a('Type', 'Parent')
...
编辑
如果您有可用的 SWI-Prolog,只需注释掉文件开头到 domains
包含的内容。或者在 SWISH 上查看 this notebook。
问题出在类型和变量上。我删除域并使用简单类型。
正确的代码:
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).