ここのより高度な計画者のほとんどにとっておそらく些細な質問ですが、新参者として、私はこれが問題であることに気づきました。
入ったときと同じ順序で新しいリストを作成する方法が必要です。例として、リスト'(1 2 0 3 4 0 0 5)が与えられたとします。ただし、リストをトラバースし、最初の引数としてcdrを返すと、新しいリストが逆方向に作成されます。
コードの例を次に示します。
作業が必要な「古いリスト」と、作成して返す「新しいリスト」としての空のリストを渡します。
0を削除することは、新しいリストが満たさなければならない「何らかの条件」としてここにあることに注意してください
(define (form-new-list old-list new-list)
(cond ((null? old-list) new-list)
(else
(if (eq? (car old-list) 0) (form-new-list (cdr old-list) new-list)
(form-new-list (cdr old-list) (cons (car old-list) new-list))))))
;test
(form-new-list '(1 2 0 3 4 0 0 5) '()) ; gives (5 4 3 2 1)
;but want (1 2 3 4 5)
逆の手順で返されるリストを逆にするだけでなく、最初に新しいリストを正しい順序でまとめたいと思います。
おそらくどこか別の場所で再帰呼び出しを行うような、これに対するある種の「トリック」はありますか?
アドバイスをいただければ幸いです。