2015-11-08 108 views
-1

我在我的程序有幾個列表爲事實序言總結的最後一個元素列表中的

road(1, 2, 3) 
road(2, 3, 4) 

我試着總結一下我的列表中的最後一個元素。我知道如何在Prolog中使用last/2運算符得到最後一個元素。但我怎麼能以遞歸方式總結多個路線列表的最後一個元素?

+2

這些都不是騙人 – lurker

回答

1

你可以這樣做:

  • 採取一切最後的元素,並把它們放在一個列表:

    findall(X, road(_, _, X), L). 
    
  • 總和列表中的所有元素:

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

總結,該解決方案是爲FO llow:

countLast(Sum):- findall(X, road(_, _, X), L), sum(L, Sum). 
sum([], 0). 
sum([H|T], S1):- sum(T, S2), S1 is H + S2. 
+0

感謝您的迴應。我如何在終端中執行此操作?我試過總和([道路(1,2,3),道路(2,3,4)],X)。 –

+0

嗨,你首先要把代碼保存在一個prolog文件中,比如'test.pl',然後用'['test.pl']。''命令從終端調用它。 – SimoV8

+0

請注意,總和工作與數字列表,而不是道路。你必須這樣調用它:'sum([3,4],X)'。 – SimoV8

相關問題