我有一个列表L=[pt(0,0), pt(1,0), ecc..]
我有一个谓词giveMeAngleBetween2Points/3
,它给出了2点之间的角度。
现在我需要一个谓词deleteSameAnglePoints/2
,如:
deleteSameAnglePoints(L, MinimumPoint)
其中MinimumPoint是我个人标准的List L的点,现在我需要获取我的列表L并通过调用谓词giveMeAngleBetween2Points(MinimumPoint,Point,Result)删除与MinimumPoint具有相同角度的所有点,但是拿走最后一个。
示例:
L = [(0,0), (0,1), (0,2), (0,5), (3,4), (5,6), (5,8), (8,9), (10,9)]
现在,如果(0,0), (0,1), (0,2), (0,5)
与调用谓词giveMeAngleBetween2Points(MinimumPoint, Point)
之后具有相同的角度,那么也是如此
(5,6), (5,8)
在它们之间具有相同的角度,并且(8,9), (10,9)
在它们之间具有相同的角度,我的结果应该是:
L = [(0,5), (3,4), (5,8), (10,9)].
答案 0 :(得分:0)
可能是
deleteSameAnglePoints([], []).
deleteSameAnglePoints([P|Ps], R) :-
( member(T, Ps), sameAngle(P, T)
-> R = Q
; R = [P|Q]
),
deleteSameAnglePoints(Ps, Q).
已定义服务谓词sameAngle / 2 - 通过您的样本定义为
sameAngle([(0,0), (0,1), (0,2), (0,5)]).
sameAngle([(5,6), (5,8)]).
sameAngle([(8,9), (10,9)]).
sameAngle(A1,A2) :- sameAngle(L), memberchk(A1,L), memberchk(A2,L).