Функция, вычисляющая расстояние между городами - Lisp
Формулировка задачи:
Предположим, что у имени города есть свойства х и у, которые содержат коор-
динаты места нахождения города относительно некоторого начала координат.
Напишите функцию (РАССТОЯНИЕ a b), вычисляющую расстояние между го-
родами а и b.
Как это сделать?
Решение задачи: «Функция, вычисляющая расстояние между городами»
textual
Листинг программы
CL-USER 10 > (setf (get 'saratov 'x) -200) -200 CL-USER 11 > (setf (get 'saratov 'y) 800) 800 CL-USER 12 > (setf (get 'moskow 'x) 0) 0 CL-USER 13 > (setf (get 'moskow 'y) 0) 0 CL-USER 16 > (defun dist (c1 c2) (let ((x1 (get c1 'x)) (y1 (get c1 'y)) (x2 (get c2 'x)) (y2 (get c2 'y))) (sqrt (+ (expt (- x1 x2) 2) (expt (- y1 y2) 2))))) DIST CL-USER 19 : 1 > (dist 'moskow 'saratov) 824.62116
Объяснение кода листинга программы
- Первая строка устанавливает значение переменной saratov:x равное -200.
- Вторая строка устанавливает значение переменной saratov:y равное 800.
- Третья строка устанавливает значение переменной moscow:x равное 0.
- Четвертая строка устанавливает значение переменной moscow:y равное 0.
- Шестнадцатая строка определяет функцию dist с четырьмя свободными параметрами c1, c2, которые должны быть ассоциативными массивами с полями x и y.
- Семнадцатая строка объявляет начало блока let, который выполняет следующие действия: — Восемнадцатая строка получает значение поля x для города c1. — Девятнадцатая строка получает значение поля y для города c1. — Двадцатая строка получает значение поля x для города c2. — Двадцать первая строка получает значение поля y для города c2.
- Восемнадцатая строка блока let вычисляет гипотенузу прямоугольного треугольника с основанием, равным разности значений полей x двух городов, и высотой, равной произведению значений полей y двух городов.
- Двадцать первая строка блока let извлекает квадратный корень из результата, полученного на предыдущем шаге.
- Последняя строка вызывает функцию dist с аргументами 'moscow и 'saratov и выводит результат 824.62116.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д