我在排序由元组组成的列表时遇到问题,想象一个带有x行的迷宫,我以元组的形式获得初始位置:(顶行,起始列)并获得最终位置(结束行,最后一列)仍然得到一个由元素组成的列表,这些元素是形式的元组:(方向,行,列),方向可以是,向上,列表由可能的运动组成。并且我的谓词必须返回一个列表,该列表包含接收但根据两个条件排序的相同元素: 距离终点位置1个订单 2如果到终点位置的距离等于我得到的列表中的2个或更多元素,我必须根据到起始位置的最大距离来命令具有相同距离的那些,即距离末端越远位置首先有元素。 注意:我得到的可能移动的最大列表可能有4个元素
这是我到目前为止所尝试的内容:
distance ((L1, C1), (L2, C2), Dist): - Dist is abs (L1-L2) + abs (C1-C2)
ordena_poss (Poss, Poss_ord, Inicial_position, Final_position): -
length (Poss, Lenght_of_Poss)
((Length_of_Poss = 0, size = 1) -> Poss_ord = Poss ; Poss_ord = Poss).
%如果Poss
的长度为0或1,则Poss_ord = Poss
(评论)
Poss
- 是您可能采取行动的清单
例如[(c, 4, 4), (d, 5, 5)]
Inicial_position
- 是迷宫的出发地。例如,(1, 6)
Final_position
- 是迷宫的到达地点。例如(5, 6)
)
最后的结果应该是一个Poss_ord
列表,其中包含相同的Poss元素,但是在远处排序。
在我打电话的这个例子中:
? - Ordena_poss ([(c, 4, 4), (d, 5, 5)], Poss_ord (1, 6), (5, 6)).
应该给出结果:
Poss_ord = [(d, 5, 5), (c, 4, 4)]
当我得到一个空的或只有一个元素列表时,代码现在已经可以使用了。
如果有人知道如何解决这个问题,我感谢你。