错误:输入错误:'file_path'预期,找到`_G409'(变种)

时间:2016-05-13 11:57:15

标签: prolog

我的Prolog程序有问题。它旨在用英语为给定的名词/动词用化学语言分配单词。

现在我们得到:

ERROR: source_sink `sharks' does not exist ...
ERROR: Type error: 'file_path' expected, found '_G409' (a var)

...

translation(Nqrrroah, Nqblubh, Nqflua, Nqdwingi,
        Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup) :- 
 ([sharks, goldfishes, hawks, finches, boys, eat, swim, fly],
  [Nqrrroah,Nqblubh, Nqflua, Nqdwingi, Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup]),

s([Nqblubh, Mhboa], []),
s([Nqrrroah, Ukahama, Nqblubh], []),
s([Nqlhalha, Falup], []),
s([Nqlhalha, Ukahama], []),
s([Nqlhalha, Ukahama, Nqflua], []),
s([Nqflua, Sharabrab], []),
s([Nqblubh, Falup, Nqdwingi], []),
s([Nqflua, Ukahama, Nqdwingi], []),
s([Nqdwingi, Falup, Nqflua], []),
is_set([Nqrrroah, Nqblubh, Nqflua, Nqdwingi, Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup]).  %is_set is True if the List is a proper list without duplicates

我们用完整的金鱼,鲨鱼,游泳......定义了我们的语法,然后才能正常工作。

1 个答案:

答案 0 :(得分:3)

tl; dr Prolog读取顶级原子列表作为加载由这些原子命名的源文件的说明。

Prolog读取顶级出现的原子列表作为加载由atom命名的文件的命令。虽然现在经常不使用它,但它曾经作为加载源文件的简写有用。你可以写, ['my_file.pl']加载数据库或一组规则。您可以通过在顶级提示中输入方括号中的源文件名称来自行尝试,例如

?- [my_file].

?- ['my_file.pl'].

现在,在你的第一个子句中,正文中的第一行是

([sharks, goldfishes, hawks, finches, boys, eat, swim, fly],
  [Nqrrroah,Nqblubh, Nqflua, Nqdwingi, Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup]),

这相当于

[sharks, goldfishes, hawks, finches, boys, eat, swim, fly],
[Nqrrroah,Nqblubh, Nqflua, Nqdwingi, Nqlhalha, Ukahama, Mhboa, Sharabrab, Falup]

因为括号对连词没有任何作用(即true, false等同于(true, false)。Prolog将此读作加载名为sharksgoldfishes等文件的命令然后加载名为Nqrrroah等的文件。第一个错误是因为当前工作目录中没有名为sharks的文件。第二个错误是因为Prolog期待文件名,但是而是接收一个自由变量。

我不确定你所说的这个列表的组合是什么,但是你的错误的根源。 :)