4
可以說我想通過逐個添加另一個列表(L)的元素來構造一個列表(L2)。結果應該與輸入完全相同。 這個任務很愚蠢,但它會幫助我理解如何通過列表進行遞歸併移除某些元素。通過在序言中使用遞歸
create([1,2,3,4], L2)
回報
L2 = [1|create([2,3,4], **)\.
這不是一個理想的結果
create(L, L2) :- (\+ (L == []) -> L=[H|T], append([H], create(T, L2), L2);[]).
稱之爲:
我已經把下面的代碼。
謝謝你的迴應。我拿出這一行: remove1(L,L2): - 顯示(L2),(\ +(L == []) - > L = [H | T],追加(L2,H,L2) ,remove1(T,L2); [])。 但是,我得到錯誤:_G256 錯誤:超出全局堆棧 這是爲什麼? – screenshot345 2010-03-30 20:33:04
我必須承認,我更熟悉更傳統的prolog語法,其中每個謂詞爲每個參數結構聲明一次。我可以這樣說,當你遇到堆棧錯誤時,這意味着你的遞歸沒有終止。這是因爲你的終止標準是錯誤的,或者你的程序的其餘部分沒有按照你認爲應該的方式來減少參數。在這種情況下,我懷疑後者,並建議你仔細觀察後綴,因爲在我看來,你可能不希望雙方都有L2。 – charlieb 2010-03-31 12:31:50