В задаче нужно использовать рекурсию. Вообще не понимаю эту тему :( - Lisp
Формулировка задачи:
На форуме уже есть эта задача, а решения стоящего нет
Связать базу данных (потомок, родители) с глобальной переменной FAMILY:
Определить функцию GENERATION-GAP, которая возвращает количество поколений между предком и потомком в генеалогическом дереве. Например,
(setf family ’((colin nil nil) (deirdre nil nil) (arthur nil nil) (kate nil nil) (franknil nil) (linda nil nil) (suzanne colin deirdre) (bruce arthur kate) (charles arthur kate) (david arthur kate) (ellen arthur kate) (george frank linda) (hillary frank linda) (andre nil nil) (tamara bruce suzanne) (vincent bruce suzanne) (wanda nil nil) (ivan george ellen) (julie george ellen) (marie george ellen) (nigel andre hillary) (frederick nil tamara) (zelda vincent wanda) (joshua ivan wanda) (quentin nil nil) (robert quentin julie) (olivia nigel marie) (peter nigel marie) (erica nil nil) (yvette robert zelda) (diane peter erica)))
> (GENERATION-GAP ‘SUZANNE ‘COLIN) 1 > (GENERATION-GAP ‘FRADERICK ‘COLIN) 3 > (GENERATION-GAP ‘FRADERICK ‘LINDA) NIL
Решение задачи: «В задаче нужно использовать рекурсию. Вообще не понимаю эту тему :(»
textual
Листинг программы
(defun father (person &optional (family *family*)) (second (assoc person family)))
Объяснение кода листинга программы
В данном коде определён функционал для поиска человека в семье. Функция father (1) принимает два аргумента: person (2) и family (3). Аргумент person является обязательным, а аргумент family — опциональным (4). Если аргумент family не указан, то используется значение по умолчанию — family (5). Внутри функции используется операция assoc (6), которая ищет человека в семье. Функция second (7) используется для получения второго элемента из результата поиска. Если человек найден, то возвращается его фамилия. В противном случае возвращается NIL (8).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д