2016-05-13 56 views
2

我的Prolog程序出現問題。它的設計目的是用英語給定的名詞/動詞以構成語言分配單詞。錯誤:類型錯誤:`file_path'預計發現`_G409'(a var)

現在有越來越:

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 

我們與整個金魚,鯊魚定義我們的語法,游泳......和之前的作品絕對正確。

+2

這裏的東西不太合理。聲明的目的是什麼?([鯊魚,金魚,鷹,雀,男孩,吃,游泳,飛行],[Nqrrroah,Nqblubh,Nqflua,Nqdwingi,Nqlhalha,Ukahama,Mhboa​​,Sharabrab,Falup]它什麼都不做。就錯誤而言,它可能是's',但你沒有顯示它。 – lurker

回答

3

tl; dr Prolog讀取頂級原子列表作爲指令加載由這些原子命名的源文件。


Prolog讀取原子列表的頂級事件作爲加載原子命名文件的命令。雖然目前這種情況並不經常發生,但它曾經是加載源文件的一個簡短手段。你只需要寫入: ['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讀取這個命令來加載名爲sharks,goldfishes等的文件,然後加載名爲Nqrrroah等的文件。第一個錯誤是因爲當前工作目錄中沒有名爲sharks的文件。第二個錯誤是因爲Prolog期待一個文件名,但是接收一個自由變量。

我不確定你的意思是列表的這個連接是什麼,但是你的錯誤的根源。 :)