当 Scheme 遇到 a(quote x)或其缩写形式时'xx 是未评估的结果。从而(quote ((quote three) (quote four) (quote five)))成为列表((quote three) (quote four) (quote five))。我认为您的意思是 pass (quote (three four five)),您可以编写它'(three four five)并且您的程序会起作用,因为您正在搜索的是第一个元素。
如果搜索的元素不是 lst 中的第一个元素,则会出现一个错误,即您有一个未绑定的变量使其无法工作。x我猜这实际上应该是绑定变量xs。我已将 every 重命名xs为x(因为 xs 通常表示一个列表,而这里它是一个搜索元素)
(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