機械です。
> この func を Scheme で書くと
>
> (define (func x)
> (if (zero? x)
> 0
> (+ 5 (func (- x 1))))) ; 末尾再帰でない!!
>
> となります.Scheme の実装の 1 つ SCM の場合,
> x = 1000000 を与えるとセグメンテーション違反になりました.
> guile でも Stack overflow になります.
私はこう書きました。
(define (f x)(if (= x 0)0(+ 5 (f (- x 1)))))
zero?を使ってないだけで、ほぼ同じですが、
Chez Schemeにかけたら、(f 1000000)でも大丈夫
だったので、良かったのかな? と思ったのですが、
末尾再帰じゃなかったんですね・・・(汗)
> python で書くなら
> # 動作確認出来ませんので間違っているかも...
>
> def foo(x, y):
> if x == 0:
> return y
> else:
> return foo(x - 1, 5 + y)
>
> def func(x):
> return foo(x, 0)
>
> と言う感じでしょうか.
え〜実験しましたところ、通常実装でも、
Stacklessでも、大きすぎる数値では暴走
しました。
結果としては、StacklessPythonでSchemeの
真似はできないようです。
※PythonでSchemeを書けば別でしょうが。
/機械伯爵/