0

我正在编写的 Prolog 程序的目标是访问列表列表的特定字段(在列表中包含路线的停靠点,然后是整个路线的距离):

这是我的列表列表的当前格式:

RoutesAndDistances = [[[Start, Stop1, Stop2, ..., End], TotalDistance],
                      [[Start, Stop1, Stop2, ..., End], TotalDistance]]].

我应该如何访问TotalDistance每条记录的字段RoutesAndDistances

我知道,要访问普通列表的单个字段,我会使用 Prolog 的语法[First | Rest]来排序剥离列表,直到达到感兴趣的值,但我不知道如何将其推断为列表列表...

任何帮助深表感谢。谢谢!

4

2 回答 2

2

你的列表似乎都有两个元素,所以你可以说:

list_second([_,Second], Second).

并获得所有距离的列表:

maplist(list_second, Routes_distances, Distances)

请注意,如果您事先知道它们都只有两个元素,那么使用列表几乎没有意义。最好使用结构,例如:

RDs = [route_distance([Start,Stop1,Stop2,...,End], D1),
       route_distance([Start,Stop1,Stop2,...,End], D2)].

这更具可读性:例如,请注意,在您给出的示例中,您已经有一个右括号太多了。

很容易使代码适应这种表示:

rd_distance(route_distance(_,D), D).

接着:

maplist(rd_distance, RDs, Ds)

为您Ds提供所有距离的列表。

于 2013-10-26T19:25:34.647 回答
1

该结构是对列表的列表。member /2 是在回溯时“枚举”列表元素的更简单方法。然后模式匹配允许提取所需的字段。例如

?- member([_,X], [[[a,b,c],2],[[d,e,f],10]]).
X = 2 ;
X = 10.
于 2013-10-26T19:32:58.480 回答