В задаче нужно использовать рекурсию. Вообще не понимаю эту тему :( - 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).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д