2014-12-04 64 views
0

我想在prolog中執行sumList函數,它採用 輸入:sumList([1,[2,3],[4],5],X)。並返回X = 15。prolog總結列表使用原子

我明白如何總結一個簡單的列表和列表的列表(即[1,2,3,4,5] & [[1,2,3],[4,5]],但我是因爲我沒有正確地處理多個內部列表(因爲我還不知道如何,我以前沒有遇到過這個問題),我被告知我必須以某種方式使用原子或原子大學,但我沒有看到清楚如何完成這個例子。 任何sml代碼我可以翻譯或prolog代碼,可以幫助我總結列表[1,[2,3],[4],5]將大大appericated。 謝謝!

回答

0

在SWI Prolog中(只是不確定ANSI),atomic(X)謂詞可以告訴你X是列表還是數字(在你的情況下)。它可以用來通過遞歸調用本身當遇到一個列表,或者一個簡單的數字元素只是添加到一筆寫sum斷言:

sum([], 0). 
sum([H|T], S) :- 
    atomic(H), 
    sum(T, S1), 
    S is H + S1. 
sum([H|T], S) :- 
    sum(H, S1), 
    sum(T, S2), 
    S is S1 + S2. 
+0

非常感謝!這令人驚奇,我一直在努力尋找原子或原子的一些體面的例子(更多的是它們的一般定義),下午一點半。是的,我在SMI prolog工作。 – Laura 2014-12-04 22:38:36

+0

@Laura一個upvote和'接受'就足夠了:) – 2014-12-04 22:41:15

+0

我沒有聲望來upvote @Eugene,但我確實接受了答案,我真的很感謝在理解原子和例子方面的幫助。 – Laura 2014-12-08 18:33:26