Skip to content

Instantly share code, notes, and snippets.

@katsaii
Created December 5, 2020 03:21
Show Gist options
  • Save katsaii/8aba9ad79f0ad24c2ffdbbe270204b51 to your computer and use it in GitHub Desktop.
Save katsaii/8aba9ad79f0ad24c2ffdbbe270204b51 to your computer and use it in GitHub Desktop.
My first prolog program!
distance(A, B, Dist) :-
A = (X1, Y1),
B = (X2, Y2),
Dx is X2 - X1,
Dy is Y2 - Y1,
Dist is sqrt(Dx * Dx + Dy * Dy).
closest([X | Xs], Target, Min) :-
distance(X, Target, Dist),
closest_ext(Xs, Target, (X, Dist), Min).
closest_ext([], _, (Min, _), Min).
closest_ext([Candidate | Xs], Target, Current, Min) :-
Current = (_, CurrentDist),
distance(Candidate, Target, CandidateDist),
(CurrentDist < CandidateDist -> Next = Current ; Next = (Candidate, CandidateDist)),
closest_ext(Xs, Target, Next, Min).
main :-
Points = [(0, 0), (1, 1)],
closest(Points, (0, 1), Min),
write(Min), nl,
halt.
all:
@swipl -o main.out -g main -c main.pl 2> /dev/null
run: all
@./main.out
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment