2010-12-03 16 views
-1

私はリストを取り込んでそれを逆転させるスキームプログラムをやっています。これまでのところ単純リスト、つまりサブリストは含まれていませんが、サブリストを含むリストをテストすると失敗します。それが間違っているところで私を助けてください。すべてのスキーム逆引き関数

(define deep-reverse 
    (lambda (L) 
    (cond 
     ((empty? L) '()) 
     (else (append (deep-reverse (rest L)) (list (first L))))))) 

答えて

0

まず、あなたは未定義のスキーム機能を使用している: は、ここでは、コードです。私は以下の前提条件を打ち切ります:

空ですか?無効である?

残りは

最初のCDRである車

あなたのコードは、リストの最初の要素を取り、別のリストに追加して機能しますです。ただし、リストの最初の要素はリストそのものになります。あなたが作業している要素がアトミックかリストかを調べるためにテストする必要があります。それがリストであれば、深く逆方向に再帰的に呼び出すことになります。

コードを追加したい場合は、コメントを残してください。この質問の

+0

まず、休息とenptyを参照してください?言語を教えるときに使われる共通の類義語です。読みやすく理解しやすい。 –

1
(define (deeprev L) 
      (if (null? L) '() 
       (if (list? (car L)) 
        (if (chek (car L)) (append (deeprev (cdr L)) (list (reverse (car L))))   
        (append (deeprev (cdr L)) (list (deeprev (car L))))) 
        (append (deeprev (cdr L)) (list (car L))))))