2009-09-06 166 views
4

如何計算Prolog中的嵌套列表元素? 我有以下謂詞定義,這會對嵌套列表的一個元素:在Prolog中計數子列表元素

length([ ], 0). 
length([H|T],N) :- length(T,M), N is M+1. 

用法:

?- length([a,b,c],Out). 
Out = 3 

這工作,但我想算嵌套元素以及即

length([a,b,[c,d,e],f],Output). 
?- length([a,b,[c,d,e],f],Output). 

輸出= 6

+0

這是做作業嗎? – 2009-09-06 05:42:17

+0

嗨毛茸茸的,我在課程中使用prolog,但這不是一個直接的作業問題。我計劃在未來的項目中實現這樣的事情。 – Blair 2009-09-06 06:16:12

回答

3
len([H|T],N) :- 
    len(H, LH), 
    len(T, LT), 
    !, 
    N is LH + LT. 
len([], 0):-!. 
len(_, 1):-!. 

測試:

?- len([a,b,[c,d,e],f],Output). 
Output = 6. 
+2

'len([],1)'成功。 – false 2014-01-25 14:05:21

+0

想知道你是否可以更好地解釋我的切割?我知道它只是說多次與H,T,LH,LT相匹配。我寫了一些類似的東西,沒有切入,它給了我一個溢出,假設它需要太多的回憶等等。我的直覺是對的嗎? – 2015-12-02 08:03:23

+0

我認爲你是對的。執行時取消取消回溯。這意味着如果 'LEN(H,LH), LEN(T,LT),'成功,並且!越過 - 它不會再次嘗試成功。 – Xonix 2015-12-02 15:30:57