Когда схема встречает (quote x)
или короткая Форма 'x
x - результат неоценимый. Таким образом, (quote ((quote three) (quote four) (quote five)))
становится списком ((quote three) (quote four) (quote five))
. Думаю, вы хотели пройти (quote (three four five))
, который вы могли бы написать '(three four five)
, и ваша процедура сработала бы с тех пор, как вы искали первый элемент.
Ошибка при наличии несвязанной переменной, которая не работает, если искомый элемент не является первым элементом в lst. x
, который, как я полагаю, фактически должен быть связанной переменной xs
. Я переименовал каждый xs
к x
(так как хз обычно означает, что список и здесь это поиск элемента)
(define (element? x lst)
(cond ((null? lst) #f)
((eq? x (car lst)) #t)
(else (element? x (cdr lst)))))
(element? 'c '(a b c d e f)) ; ==> #t
(element? 'g '(a b c d e f)) ; ==> #f
(element? (quote e) (quote (a b c d e))) ; ==> #t
Если вы действительно хотите, чтобы искать другие вещи, чем символы, вы должны использовать equal?
вместо eq?
, например:
(define (element? x lst)
(cond ((null? lst) #f)
((equal? x (car lst)) #t)
(else (element? x (cdr lst)))))
(element? '(hello dolly) '((hello paul) (hello dolly) (hello todd))) ; ==> #t
в последнем строка, не должна 'x' быть' xs'? – japreiss
это просто ошибка, но даже с xs вместо x она не работает. –