2016-05-05 4 views
2

私はリストで満たされたリストを持っていますが、そのうちのいくつかはnullです。私の機能は、メインリストを通り、空のリストがあるかどうかをチェックしています。空の場合、それらは削除されます(または削除する必要があります)。私は車を取得し続ける:それはペアを期待しているが、 '()を得ることを私に伝える契約違反エラー。このエラーが発生しないように変更する方法がわかりません。スキーム内のリスト内の空リストを削除する

 (define (take-out-nulls alist) 
     (cond ((null? (car alist)) (take-out-nulls (cdr alist))) 
     (#t (cons (car alist)(take-out-nulls (cdr alist)))))) 

答えて

3

あなたは終了テストなしで再帰を持っている、それはあなたの関数もそれの終わりにalistcarをお願いし続けています。

単に関数に、このようなテストを追加します。

(define (take-out-nulls alist) 
    (cond ((null? alist) '()) 
     ((null? (car alist)) (take-out-nulls (cdr alist))) 
     (#t (cons (car alist) (take-out-nulls (cdr alist)))))) 

(take-out-nulls '(a()() b c())) ; => (a b c) 
+0

うわーを使用することができ、私はそれを逃した信じることができません。どうもありがとうございます。 – Leena

0

また

(define (take-out-nulls alist) 
    (filter (λ (x) (not (empty? x))) alist)) 

(take-out-nulls '(a()() b c())) ;=> (a b c) 
関連する問題