Функция, вычисляющая расстояние между городами - Lisp

Узнай цену своей работы

Формулировка задачи:

Предположим, что у имени города есть свойства х и у, которые содержат коор- динаты места нахождения города относительно некоторого начала координат. Напишите функцию (РАССТОЯНИЕ a b), вычисляющую расстояние между го- родами а и b. Как это сделать?

Решение задачи: «Функция, вычисляющая расстояние между городами»

textual
Листинг программы
  1. CL-USER 10 > (setf (get 'saratov 'x) -200)
  2. -200
  3.  
  4. CL-USER 11 > (setf (get 'saratov 'y) 800)
  5. 800
  6.  
  7. CL-USER 12 > (setf (get 'moskow 'x) 0)
  8. 0
  9.  
  10. CL-USER 13 > (setf (get 'moskow 'y) 0)
  11. 0
  12.  
  13. CL-USER 16 > (defun dist (c1 c2)
  14.   (let ((x1 (get c1 'x))
  15.         (y1 (get c1 'y))
  16.         (x2 (get c2 'x))
  17.         (y2 (get c2 'y)))
  18.    (sqrt (+ (expt (- x1 x2) 2) (expt (- y1 y2) 2)))))
  19. DIST
  20.  
  21. CL-USER 19 : 1 > (dist 'moskow 'saratov)
  22. 824.62116

Объяснение кода листинга программы

  1. Первая строка устанавливает значение переменной saratov:x равное -200.
  2. Вторая строка устанавливает значение переменной saratov:y равное 800.
  3. Третья строка устанавливает значение переменной moscow:x равное 0.
  4. Четвертая строка устанавливает значение переменной moscow:y равное 0.
  5. Шестнадцатая строка определяет функцию dist с четырьмя свободными параметрами c1, c2, которые должны быть ассоциативными массивами с полями x и y.
  6. Семнадцатая строка объявляет начало блока let, который выполняет следующие действия: — Восемнадцатая строка получает значение поля x для города c1. — Девятнадцатая строка получает значение поля y для города c1. — Двадцатая строка получает значение поля x для города c2. — Двадцать первая строка получает значение поля y для города c2.
  7. Восемнадцатая строка блока let вычисляет гипотенузу прямоугольного треугольника с основанием, равным разности значений полей x двух городов, и высотой, равной произведению значений полей y двух городов.
  8. Двадцать первая строка блока let извлекает квадратный корень из результата, полученного на предыдущем шаге.
  9. Последняя строка вызывает функцию dist с аргументами 'moscow и 'saratov и выводит результат 824.62116.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы