2015-11-08 80 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

相关问题