访问列表列表中的特定字段 - Prolog

时间:2013-10-26 19:12:47

标签: list prolog

我正在研究的这个Prolog程序的目标是访问列表列表的特定字段(在列表中包含路径的停靠点,后跟整个路径的距离):

以下是我的列表清单的当前格式:

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

如何访问TotalDistance的每条记录的RoutesAndDistances字段?

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

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分: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列表。

答案 1 :(得分:1)

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

?- member([_,X], [[[a,b,c],2],[[d,e,f],10]]).
X = 2 ;
X = 10.