私はラケットを教えようとしています。私は現在、ネストされたリストを理解するのに役立つ関数を書こうとしています。この関数は、ネストされたリストとプロシージャを取り、そのプロシージャを各要素に適用して新しいリストを生成します。例:ラケット入れ子リストとそれらに関数を適用する
(map-tree even? '(1 2 3 4)) => '(#f #t #f #t)
ここで私はこれまで持っているものです:
(define (map-tree proc tree)
(map-tree-aux tree proc '()))
(define (map-tree-aux tree proc lst)
(if (null? tree)
lst
(if (list? tree)
(if (null? (cdr tree))
(if (number? (car tree))
(map-tree-aux (car tree) proc (append-end (proc (car tree)) lst))
(map-tree-aux (car tree) proc lst))
(if (number? (car tree))
(map-tree-aux (cdr tree) proc (append-end (proc (car tree)) (map-tree-aux (car tree) proc lst)))
(map-tree-aux (cdr tree) proc lst)))
lst)))
(define (append-end elem lst)
(append lst (list elem)))
これは私が供給元の例で動作しますが、より複雑な例が間違って出てくる:
(map-tree even? '(1 (2 (3 (4))))) should be '(#f (#t (#f (#t)))), but is currently (#f #t #f #t).
私はそれがちょうど問題がどこかの "上場"されていることを知っていますが、私はそれを行う方法を見つける問題があります。私が最初に考え
は(結果のリストは反対方向にネストされている)の木がnullで、(car tree)
は番号ではありませんが、私は私が何をしたいの反対を得ればlst
にlist
手順を適用することでした。私は本当にあなたの助けに感謝します。
ありがとうございます!
をあなたに感謝!!:すべてのケースについて
を、あなたが持っていますあなたは間違いなくラケットの基本を理解するのに苦労していたと言うことができますが、私はあなたが時間をかけて私と一緒に行くことに感謝します:)。 – mrdjl