我正在终端上运行SWI-Prolog,在Mac电脑上。我正在尝试通过在终端打开swipl后写入通常的命令来访问Atom文件:
?- [hwk1-my_name].
与其说swipl拥有可以操作的知识库,不如说它给了我这个:
ERROR: Arguments are not sufficiently instantiated
我对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).
father_of/2
而不是仅仅的father/2
,那么哪个参数表示父亲就会更加清晰明了! - matinstantiation-error
和uninstantiation-error
(请参见https://www.complang.tuwien.ac.at/ulrich/iso-prolog/error_k!)。它们在[标签:ISO-Prolog]中被使用,并且它们告诉了期望的特性(例如`uninstantiation`),其不存在会导致错误。 - repeatinstantiation-error
是一个很好的名字。uninstantiation-error
表示相反的意思,即过多实例化,并且期望较少(即“un”)的实例化。许多遇到“参数未充分实例化”问题的用户在算术(主要是整数)方面遇到这些问题,并且从被告知关于CLP(FD)的信息中获益匪浅,因此在其中一些问题中,我还添加了[tag:clpfd]标签以及一个响应,显示如何使用纯方法解决该问题。 - mat