首页 > 解决方案 > 如何计算列表中列表的所有长度?

问题描述

我正在尝试计算一个列表,其中包含列表中每个列表的长度。

我的代码是:

length_list(A, B, N) :-
  findall(length(Path,E), 
  path(A, B, Path, Length), N).

path(A, B, [A, B], X) :-
  edge(A, B, X).

path(A, B, PathAB, Length) :-
  edge(A, C, X),
  path(C, B, PathCB, LengthCB),
  PathAB = [A | PathCB],
  Length is X + LengthCB.

path(A, B, PathAB, Length)将计算点 A 和点 B 之间存在的所有路径及其长度

我的问题是我的代码返回:

?- length_list(a,d,N).
N = [length([a, b, d], _6624), 
     length([a, b, c, d], _6588), 
     length([a, b, c, e, d], _6546), 
     length([a, b, c, e|...], _6498), 
     length([a, b, c|...], _6456)].

它返回一个列表,length(Path,E)但我期望一个E.
我怎样才能做到这一点?

标签: prolog

解决方案


推荐阅读