私はこのコードを持っている:これをtail-recursiveにするにはどうすればいいですか?
(define (prog1 x y)
(let ([rel (related x y)])
(cond
[(null? rel) (list x)]
[else (cons x (map (lambda (d) (prog1 (neighbour d) y)) rel))])))
私が何をしたいのかを試してみて、それが末尾再帰にするです。私は私のような何かをする必要があることを知っている:
(define (prog1 x y)
(prog1-iter x y `()))
(define (prog1-iter x y acc)
(...
))
をしかし、私は、このコードに私のコードから行くことが方法がわからないよ...私は、元はそれにマップを持っているので、それはだと思うし、私はどのようにわかりませんよこれをprog1-iter
に組み込みます。誰かが正しい方向に私を向けることができます!
元のアルゴリズムがよく知られていて、命令的な解決策が存在する場合は、さらに優れていることが分かります。これにより、機能的な末尾再帰的な実装に簡単に変換できます。 –