2011-04-26 40 views
2

我是turbo prolog中的新手。我在添加嵌套列表時遇到問題。我要像這 -在turbo序言中追加嵌套列表的問題

目標的目標:mega_append([[1,3],[2,4,6],[0]],X)

輸出應該X=[1,3,2,4,6,0]

我用下面的代碼:

domains 

list=integer* 

predicates 

    mega_append(list,list) 
    append(list,list,list) 

clauses 

    mega_append([],[]). 

    mega_append([H|T],L3):- 
     mega_append(H,L1), 
     mega_append(T,L2), 
     append(L1,L2,L3). 

    mega_append(X,[X]). 

    append([],ListB,ListB). 

    append([X|List1],List2,[X|List3]):- 
     append(List1,List2,List3). 

該程序生成的error.It是「違章變鍵入這個位置。「然後它表示H在行mega_append(H,L1)中的位置。 我該如何擺脫這個問題?我的程序有錯嗎?請幫幫我。

回答

1

您正在操作列表列表,而不是整數列表。試試

listlist = list* 
mega_append(listlist,list) 

然後,修復你的遞歸。你寫的版本不能用於Prolog的靜態類型變體,Turbo Prolog顯然是:mega_append在其第一個參數的頭部被遞歸地調用,它與參數本身是不同的類型(如果它是類型的T*,那麼它的頭必須是T)。

mega_append([], []). 
mega_append([H|T], R) :- 
    mega_append(T, R0), 
    append(H, R0, R). 

而順便說一句,這個謂詞的通用名是concat/2

+0

非常感謝您的建議。但我仍然面臨這個問題。請幫助我.. – Joyita 2011-04-26 19:20:43

+0

@Joyita:在代碼中發現了另一個錯誤,更新了答案。 – 2011-04-26 20:27:53

0

mega_append([],[]). 
mega_append([[A|R0]|R1],[A|R2]) :- 
     mega_append([R0|R1],R2). 
mega_append([[]|R1],R2) :- 
     mega_append(R1,R2). 
+1

當兩個足夠時不需要三個子句。無需兩次發佈您的答案;你應該編輯舊的。 – 2011-04-27 09:02:16

+0

非常感謝。我編輯了程序並且它正在工作;問題已解決。 – Joyita 2011-04-27 19:58:56