0

要素がリストの一部であるかどうかを検索するプログラムを実行しましたが、単語で機能しません 私のプログラム:

(define (element? xs lst) 
  (cond ((null? lst) #f) 
        ((eq? xs (car lst)) #t) 
        (#t (element? x (cdr lst)))))

例:

>(element? 'three (quote ((quote three) (quote four) (quote five))))
>,=> #f but i need #t 

助けてください。

4

3 に答える 3

1

(quote x)Scheme が aまたはその短縮形に遭遇した場合、 'xx は未評価の結果です。したがって(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
于 2013-10-13T20:52:40.127 に答える
-1

eq?2 つのオブジェクトがメモリ内の同じ場所にあるかどうかをテストします。実際には値を比較しません。2 つの異なるメモリ位置で同一の文字列を作成すると、eq?が返されますfalsestring=代わりに使用してください。

いくつかのコード例を示したかったのですが、Scheme は積極的に文字列をインターンしており、2 つの別々に割り当てられた同一の文字列を存在させることはできません...

関連する質問

于 2013-10-13T20:49:13.443 に答える