我正在研究的这个Prolog程序的目标是访问列表列表的特定字段(在列表中包含路径的停靠点,后跟整个路径的距离):
以下是我的列表清单的当前格式:
RoutesAndDistances = [[[Start, Stop1, Stop2, ..., End], TotalDistance],
[[Start, Stop1, Stop2, ..., End], TotalDistance]]].
如何访问TotalDistance
的每条记录的RoutesAndDistances
字段?
我知道,要访问普通列表中的单个字段,我会使用Prolog的[First | Rest]
语法来清除列表,直到达到感兴趣的值,
但我不知道如何将其推断为列表列表......
非常感谢任何帮助。谢谢!
答案 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.