我正在尝试解决一个问题,我有一个坐标列表并想要最接近某个点。
示例:我得到了坐标 [[1,2],[3,4],[10,3]] 并且想要获得离原点 [0,0] 最近的点。[1,2] 在这个例子中。
我写了这个:
list_min([H|T], Min):-
list_min(T, H, Min).
list_min([], H, H).
list_min([L|Ls], Min0, Min) :-
point(P),
distance(Min0,P,D0),
distance(L,P,D1),
Lower is min(D0, D1),
assert(candidate(Min0)),
assert(candidate(L)),
forall(candidate(X),distance(X,P,Lower)),
retractall(candidate(_)),
list_min(Ls, X, Min).
distance(A,B,D):-
A = [A1,A2],
B = [B1,B2],
Y is B2 - A2,
X is B1 - A1,
D is sqrt(X*X + Y*Y).
但是,看起来它总是在 forall 行中失败。我做错了什么?有没有更好的方法来做到这一点?