座標のリストがあり、ポイントに最も近いものを取得したいという問題を解決しようとしています。
例: 座標 [[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行では常に失敗するようです。私が間違っているのは何ですか?これを行うためのより良い方法はありますか?