(quote x)
Scheme が aまたはその短縮形に遭遇した場合、 '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
(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