2012-11-27 197 views
1

我在Prolog中使用SWI-Prolog進行練習,獲取嵌套列表並將其轉換爲元素列表,然後創建元素的總和,我創建了兩個單獨的謂詞,這些謂詞使我兩個功能:在prolog中加入謂詞

my_flatten(X,[X]) - >通過用元素(遞歸地)替換每個列表,可能將列表作爲元素保存到「扁平」列表中。

my_flatten(X,[X]) :- \+ is_list(X). 
my_flatten([],[]). 
my_flatten([X|Xs],Zs) :- 
    my_flatten(X,Y), my_flatten(Xs,Ys), append(Y,Ys,Zs). 

addList->添加列表中的所有元素,並返回它們的和

addList([],0). 
addList([X|Xs],N):- 
    addList(Xs,N0),N is X+N0. 

本身的問題是,我在序言新的編程,我不知道該如何加入兩個謂詞在同一個謂詞中,以便由謂詞addList使用由my_flattern返回的列表。也許這是一個愚蠢的問題,但我一直堅持了好幾天。我需要一些幫助,以澄清其它問題

+0

請不要使用作業標籤。它已經過時並正在被刪除。查看標籤wiki獲取更多信息。 – Bart

回答

2

這個問題,要建立一個新的謂詞這同時做兩,只需調用都my_flattenaddList,用一個共享變量:

addListFlattened(L, Sum) :- 
    my_flatten(L, L2), 
    addList(L2, Sum). 

addListFlattened是一個新的謂詞(你可以更改名稱),其中重複使用addList

+0

你可以做addList(my_flatten(L,L2),Sum)嗎? –