qua*_*ret 3 prolog instantiation-error
我通过终端在Mac上运行SWI-Prolog.我正在尝试通过在终端中打开swipl之后编写通常来访问Atom文件:
?- [hwk1-my_name].
Run Code Online (Sandbox Code Playgroud)
而不是swipl有知识库可以玩,它给了我这个:
ERROR: Arguments are not sufficiently instantiated
Run Code Online (Sandbox Code Playgroud)
我是Prolog的新手,我现在的程序只是我教授提供的复制粘贴代码,以便开始分配.这是否意味着错误可能是由于下面的代码中的某些内容,如果是这样,是什么促使这个?这是提供给我的代码:
father(Dad, Child) :-
parent(Dad, Child),
male(Dad).
mother(Mom, Child) :-
parent(Mom, Child),
female(Mom).
had_a_child(Man, Woman) :-
father(Man, Child),
mother(Woman, Child).
sibling(Sibling1, Sibling2) :-
parent(Parent, Sibling1),
parent(Parent, Sibling2),
Sibling1 \= Sibling2.
brother(Brother, Sib) :-
sibling(Brother, Sib),
male(Brother).
sister(Sister, Sib) :-
sibling(Sister, Sib),
female(Sister).
Run Code Online (Sandbox Code Playgroud)
小智 6
你明显的问题是-
文件名内部.您正在使用的文本编辑器完全无关紧要.甚至令人困惑,因为Prolog的数据类型之一就是原子.
您有两种选择:
即使没有引用,也可以使用有效Prolog原子的文件名.这意味着它们不能以大写或数字开头,并且只能包含字母,数字和下划线(_
).然后,您的文件仍然可以具有.pl
扩展名,您可以像以下一样查询:foo.pl
--->?- [foo].
使用完整的文件名,扩展名,并在其周围加上单引号:foo-bar.baz
---> ?- ['foo-bar.baz'].
.如您所见,您甚至不再需要.pl
扩展程序.
每当您对Prolog看到的内容有疑问时,您可以尝试write_canonical/1
:
?- write_canonical(hwk1-my_name).
-(hwk1, my_name)
true.
Run Code Online (Sandbox Code Playgroud)
换句话说,Prolog将此作为-/2
与原子的复合项,hwk1
并my_name
作为第一个和第二个参数.