對於Prolog,我還是比較新的,並且涉及列表的練習一直存在困難:給定任意數據列表,將列表分成兩個列表 - 一個列表包含整數值,一個包含實數值,然後忽略原始列表中的任何其他項目。按類型將列表分類爲兩個單獨的列表
我寫到目前爲止以下:
isInteger(I, IntegerListHead):-
integer(I),
IntegerListHead is I.
isFloat(F, FloatListHead):-
float(F),
FloatListHead is F.
splitList([]).
splitList([H|T], [IntHead|IntList],[FloatHead|FloatList]):-
isInteger(H, IntHead),
isFloat(H, FloatHead),
splitList(T, IntList, FloatList).
不過,我不知道爲什麼我得到一些錯誤:
?- splitList([1, 2.5, 6, 7.0, -1, -0.5], I, F).
ERROR: toplevel: Undefined procedure: splitList/3 (DWIM could not correct goal)
通常嫌疑犯這個錯誤似乎並沒有是這樣,但也許我錯過了什麼?
編輯:當我重新加載該文件,並運行它第二次我有以下幾點:
?- splitList([1, 2.5, 6, 7.0, -1, -0.5], I, F).
false.
您的'splitList'謂詞對於基本情況子句有一個參數,但遞歸子句有3個參數。這是行不通的。你也需要3的基本情況,它需要爲其他兩個提供相應的值(在這種情況下,不適合'[]'?)。你的錯誤看起來像Prolog沒有定義三參數謂詞,所以你不能加載你正確顯示的代碼。 – lurker
你的錯誤信息確實包含一個錯字:你正在調用'splitList/1',這是一個簡單的事實,但是你會得到一個關於'splitList/3'的錯誤。這不可能。 – false
啊,道歉 - 我複製了不正確的行。讓我快速編輯它。 –