2017-01-11 3 views
-1

Чтобы выполнить упражнение, мне нужно проверить, есть ли элемент в списке или нет. Я знаю, что в lisp есть функция member, но наш инструктор очень строг и не позволяет нам использовать вещи, которые еще не были охвачены в ходе курса.Проверьте наличие элемента в lisp

Что бы способ проверить, если атом находится в списке, используя только cond, nil, car, not, cdr, +, equal, defun?


Edit: После комментария Doseke в; вот попытка:

(defun presence (list item) 
    (cond 
     ((atom list) nil) 
     ((equal (car list) item) t) 
     ((consp list) (presence (cdr list) item)) 
     (t nil) 
    ) 
    ) 

редактировать: Я изменил название, чтобы он соответствовал моему актуальному вопросу

+0

Можно ли использовать рекурсию и проверить, соответствует ли товар автомобилю? – Doseke

+0

@ Doseke: Да, я так думаю –

+0

'atom',' consp' и 't' не являются частью вашего списка« только для использования ». – kmkaplan

ответ

2

Поскольку вы ограничены в используемых функциях, это может быть что-то вроде этого, я предполагаю, что:

(defun member-2 (x xs) 
    (cond ((not xs) nil) 
     ((equal x (car xs)) xs) 
     (t (member-2 x (cdr xs))))) 
+0

Незначительный nitpick, istead использования NOT, было бы лучше использовать ENDP, поскольку он лучше передает намерения. Или, по крайней мере, NULL – PuercoPop

+2

Это так. Я просто использовал ограничения из вопроса op. Он включает «нет», но не включает null) – leetwinski

Смежные вопросы