2017-01-17 30 views
-1

私はリストとそのリストの2つの要素をとる関数を作った。ラケットプログラムが正常に動作しない

また、想定されている要素のいずれかがまったく表示されない場合、プロシージャは#fも返す必要があります。ここ

は、私がこれまでに得たものである:

(define (before-in-list? lst a b) 
    (cond 
    ((empty? lst) #f) 
    ((eq? (car lst) a) (map b (cdr lst)) #t) 
    ((eq? (car lst) b) #f) 
    (else (before-in-list? (cdr lst) a b)))) 

はそれをテストするために、私が使用:

(before-in-list? '(back in the ussr) '(in) '(ussr)) 
(before-in-list? '(back in the ussr) '(the) '(ussr)) 

問題は、それが毎回fは私を与えることです。

どうすればいいですか?

答えて

1

mapの使用方法は意味がありません。また、より一般的な比較にはequal?を使用し、abのパラメータはリストではいけません。試してみてください:

(define (before-in-list? lst a b) 
    (cond 
    ((empty? lst) #f) 
    ((equal? (car lst) a) 
    (if (member b (cdr lst)) #t #f)) 
    ((equal? (car lst) b) #f) 
    (else (before-in-list? (cdr lst) a b)))) 

(before-in-list? '(back in the ussr) 'in 'ussr) 
=> #t 
(before-in-list? '(back in the ussr) 'the 'ussr) 
=> #t 
+0

ありがとうございました –

+0

@yousifS問題ありません!この回答があなたに役立った場合は、[承諾](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を忘れずに、チェックマークを左に); –

+0

@yousifSお願いします。この回答を受け入れるのを忘れないでください! –

関連する問題