2015-11-06 55 views
0

我是一個在Prolog總新手和學習它,而在學校課程。我們明天會有這個重大的測試,當我在這裏學習時,我試圖從以前版本的測試中完成一些任務。一個特殊的任務是採取一個字符串,並在每個字符「a」之後加上「 - 」。例如,單詞「example」看起來像「實例」。序言給is_absolute_file_name未處理的異常

我寫了一個代碼爲它:

kriipsuga(S6ne,R) :- 
    name(S6ne,X), 
    write(X), 
    goThrough(X,Y), 
    name(R,Y). 

goThrough([X|Xs],Y) :- 
    X == 97, 
    append(Y,[97],Z), 
    append(Z,[45],O), 
    goThrough(Xs,O). 

goThrough([X|Xs],Y) :- 
    X \= 97, 
    append(Y,[X],O), 
    goThrough(Xs,O). 

goThrough([],Y) :- write(Y),Y. 

這是錯誤:

?- goThrough([1,2,3,4],Y). 
[1, 2, 3, 4] 
ERROR: Unhandled exception: is_absolute_file_name/1: Type error: `text' expected, found `1' 

谷歌搜索任何結果,也許你們能幫助我找到答案。

謝謝:)

回答

1

快捷[File1, File2, ...]在Prolog是傳統上用作速記到編譯和加載一個源文件(通常,consult/1)謂詞。文件參數展開爲絕對文件路徑。在你的代碼,最後一句是:

goThrough([],Y) :- write(Y),Y. 

在您的示例查詢,該條款最終被使用和呼叫[1|_]製成,因此你的錯誤。爲了清楚起見,請嘗試使用查詢來追蹤執行:

?- trace, goThrough([1,2,3,4],Y). 
+0

我追蹤到它並發現錯誤,但是我已經崩潰了,不知道該怎麼改變。你能指出什麼嗎? – Banana

+1

@Banana在'寫(Y),Y':最後應該做什麼'Y'呢?如果你能弄明白這一點,你就會明白答案。 – 2015-11-06 11:40:29