2016-10-13 5 views
-1
(define (long a b) 
(cond ((null? a) '()) 
     ((null? b) '()) 
     (else 
(if (equal? (car a) (car b)) 
    (cons a (long (cdr a) (cdr b))) 
    (cons b (long (cdr a) (cdr b))))))) 

この関数は、2つのリスト間で最も長い共通プレフィックスを見つけると仮定します。だから私が '(1 2)と'(1 2 3)を入力すると、私は '(1 2)を得るべきです。しかし、私が(長い(1 2)(1 2 3))を実行すると、((1 2)(2))が得られます。私のコードを見直しても、私はその問題を見つけられないようです。誰かが問題を見つけるのを助けてくれますか?共通プレフィックスリスト関数に関する問題

ありがとうございます。

答えて

0

簡単な解決策は以下の通りです:

リストは接頭辞を終了
(define (long a b) 
    (cond ((null? a) '()) 
     ((null? b) '()) 
     ((equal? (car a) (car b)) (cons (car a) (long (cdr a) (cdr b)))) 
     (else '()))) 

は空のリストです。 carが両方とも等しい場合、結果はcarとリストのcdrの最長プレフィックスを含むリストになります。それ以外の場合は、最初の要素のリストが異なるため、結果は空のリストになります。

0

一つはここに条件と 'の/ list' のループを使用することができます。

(define (long a b) 
    (for/list ((i a) 
      (j b) 
      #:break (not(= i j))) 
    i)) 

(long '(1 2 3) '(1 2)) 

出力:

'(1 2) 
関連する問題