- 572 名前:デフォルトの名無しさん [04/06/10 03:09]
- >>569
面白いコードをありがとうございます。ただ、fibonacci 数列の定義をこのコードから 読み取るのは難しいと思います。 また、最後の2行は実質的に不要で、コードのわかりやすさに寄与していないのではないでしょうか? (define (fib x) (define fib (let loop ((y 1) (lst '(1 1))) (if (>= y x) (lambda (x) (list-ref (reverse lst) x)) (loop (+ y 1) (cons (+ (car lst) (cadr lst)) lst))))) (fib x)) と書いても結果は同じです。 >>570 すみません、私の言葉が正確でありませんでした。 手続き型の記述をループに書き換える方法としては、私も自然だと思います。 (実は、>>566 の関数 fibo は、既存のそのままのコードではなく、自分がわかりやすい ように書き直したものです。) ただ私は、もとの定義どおりの>>565 の関数 fib の方を末尾再帰にしたかったのです。 手続き型のロジックを元にしたため、定義から大きく違った形になっている、という意味で 「無理に」という言葉を使いました。 >>571 恥ずかしながら、このコードは私には難しいです。 慣れた人になら、このコードも関数型らしい「定義を書くだけでそれがそのままコードになる」 記述に読めるのでしょうか?
|

|