2013-02-16 163 views
-2

因此,如果輸入爲L = [1,[2,3,4],5],輸出應該是R = [4,5]。 在常規列表中最後一個元素的代碼是最後一個元素

last([X],X]. 
last([H|T],X):-last(T,X). 
+0

是什麼結果[1, [2,3]]? 「好的...請解決方法?」當然不是有答案的好方法! – joel76 2013-02-16 13:50:15

+0

您是否指所有嵌套級別的所有子列表中的所有最後元素?這對於@ joel76的例子來說就是[1,3]? – 2013-02-16 14:09:26

+0

對於l = [1,[2,3]],r = [1,3],是的,亞歷山大。 – 2013-02-16 15:53:02

回答

0

這不完全是優雅的Prolog,但我認爲它會做你想要什麼:

deeplast([L], X) :- 
    deeplast(L, X). 
deeplast([X], X) :- 
    atomic(X). 
deeplast([H|T], X) :- 
    atomic(H), 
    deeplast(T, X). 
deeplast([H|T], X) :- 
    compound(H), 
    deeplast(H, Y), 
    deeplast(T, Z), 
    X = [Y, Z]. 
+0

不起作用:'? - deeplast([1,[2,3,4]],R)。 R = [2,3,4]' – CapelliC 2013-02-17 07:45:09

+0

非常真實,我沒有提到列表中的最後一個詞是複合詞的情況。我認爲編輯後的版本現在涵蓋了這種情況。 – 2013-02-17 10:21:00