在查阅文件时,参数没有充分实例化

时间:2016-02-05 06:05:08

标签: prolog instantiation-error

我通过终端在Mac上运行SWI-Prolog。我正在尝试通过在终端中打开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).

1 个答案:

答案 0 :(得分:5)

你明显的问题是文件名中的-。您正在使用的文本编辑器完全无关紧要。甚至令人困惑,因为Prolog的数据类型之一是 atom

您有两种选择:

  1. 使用有效Prolog原子的文件名,即使没有引用也是如此。这意味着它们不能以大写或数字开头,并且只能包含字母,数字和下划线(_)。然后,您的文件仍然可以包含.pl扩展名,您可以像以下一样查询:foo.pl ---> ?- [foo].

  2. 使用完整的文件名,扩展名,并在其周围加上单引号:foo-bar.baz ---> ?- ['foo-bar.baz'].。正如您将看到的,您甚至不再需要.pl扩展名。

  3. 每当您对Prolog看到的内容有疑问时,您可以尝试write_canonical/1

    ?- write_canonical(hwk1-my_name).
    -(hwk1, my_name)
    true.
    

    换句话说,Prolog将此作为复合词-/2,将原子hwk1my_name作为第一个和第二个参数。

相关问题