2013-02-09 6 views
0

Я работаю над проблемой, связанной с перечнем городов и находя ближайшим к назначенному в Прологе. Например, если я хочу, чтобы найти ближайший город Сиэттл из этого набора данныхнайти расстояние между двумя городами

city(5,3, seattle). 
city(22,17,nashville). 
city(4,7, portland). 
city(21,18, memphis). 
city(1,11, sacramento). 

и у меня есть предикат/2 определения расстояния,

calc(C1,C2,D) :- 
    city(V1,H1,C1), 
    city(V2,H2,C2), 
    D is ((V1-V2)^2+(H1-H2)^2). 

Как я мог бы использовать FindAll/3 для вычисления расстояния найти ближайший город?

ответ

0

Формула (x1 - x2)^2 + (y1 - y2)^2 дает квадрат расстояния; если квадрат наименьший, расстояние кратчайшее.

Редактировать: Что нужно накапливать, это пара ближайшего города до сих пор, расстояние^2, когда вы копаетесь в списке городов (или работаете с фактами для городов). Посмотрите на подобные примеры.

+0

спасибо, что понял. –

+0

, но у меня проблема с аккумулятором, если вы не возражаете объяснить эту часть? –

Смежные вопросы