gpt4 book ai didi

lambda - 如何返回到一个点的最小距离?

转载 作者:行者123 更新时间:2023-12-02 22:31:27 26 4
gpt4 key购买 nike

我正在尝试解决一个问题,在该问题中我有一个坐标列表并希望获得最接近的点。

例子:我得到了坐标 [[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 行中失败。我做错了什么?有更好的方法吗?

最佳答案

对于 SWI-Prolog,您还可以使用函数式样式:

:- use_module(library(lambda)).


point([0,0]). % The reference point

% Entry point predicate
% First parameter : a list of points
% Second parameter (result) : the point closest to the reference point
list_min([H|Tail], Min) :-
point(Reference),
distance(H, Reference, D),

foldl(\X^Y^Z^(distance(X, Reference, DX),
Y = [Cur_D, _Cur_P],
( DX < Cur_D
-> Z = [DX, X]
; Z = Y)),
Tail, [D, H], Min).


distance(A,B,D):- % copy-pasted from your version
A = [A1,A2],
B = [B1,B2],
Y is B2 - A2,
X is B1 - A1,
D is sqrt(X*X + Y*Y).

关于lambda - 如何返回到一个点的最小距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12187593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com