Написать функцию проверяющую является ли аргумент элементом списка - Lisp
Формулировка задачи:
Написать функцию проверяющую является ли аргумент элементом списка.
Аргумент может быть как атомом так и списком. Список могут состоять из списков.
Например
Аргумент: (1 2 (7))
Список (1 2 2 (1 2(7)) 1)
И
Аргумент: 1
Список (1 2 2 (1 2(7)) 1)
Причем есть ограничения на функции которые можно юзать. Это только
defun; cons; ca..ar; cd..dr; '; atom; COND ; eq, or, and, not, numberp
+ те которые я писал раньше но из них реально может пригодится только проверка поэлементной эквивалентности списков
Листинг программы
- (defun eqlists (lst1 lst2)
- (cond ((and (null lst1)(null lst2)) T)
- ((or (and (null lst1)(not (null lst2)))
- (and (not (null lst1))(null lst2))
- (not (equal (car lst1)(car lst2)))) nil)
- (T (eqlists (cdr lst1)(cdr lst2)))))
Решение задачи: «Написать функцию проверяющую является ли аргумент элементом списка»
textual
Листинг программы
- (defun deep-member (v w)
- (cond ((null w) nil)
- ((equalp (car w) v) t)
- ((atom (car w)) (deep-member v (cdr w)))
- (t (or (deep-member v (car w)) (deep-member v (cdr w))))))
- > (deep-member '(7) '(1 2 2 (1 2(7)) 1))
- T
Объяснение кода листинга программы
В этом коде определена функция deep-member, которая проверяет, является ли элемент v частью списка w. Функция использует структуру cond для проверки нескольких условий:
- Если w равно null, то возвращается nil, так как пустой список не содержит элементов.
- Если car (первый элемент) w равен v, то возвращается t, так как v является членом списка.
- Если atom (является ли он атомом) car w, то возвращается результат вызова deep-member v для остальной части списка (cdr w).
- В противном случае, возвращается результат вызова deep-member v для car w или cdr w. Таким образом, функция проходит по каждому элементу списка, пока не будет найден элемент v или пока не будет просмотрена вся структура списка. В приведенном примере, функция deep-member вызывается с аргументами '(7) и '(1 2 2 (1 2(7)) 1). Поскольку '(7) является подсписком '(2 (7)) в '(1 2 2 (1 2(7)) 1), функция возвращает t.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д