- xhl_kogitsune
- 14787
- 15
- 21
- 4
http://t.co/Ox4MMcNl によると「recurはClojureにおける唯一のスタックを浪費しないループ構造です。末尾再帰の最適化はありませんしや未知の束縛のループのために自分を呼び出すような使い方はできません」……かな?
2012-03-28 15:00:50ジャンプの先にジャンプ置いたらサイズ制限は回避できますか? RT @esumii 野暮きわまりない蛇足。(相互再帰ではなく単独再帰で、関数本体がでかすぎなければ)JVMでも普通に末尾再帰最適化できます
2012-03-28 15:01:53末尾再帰とTCOを混同されていませんか.末尾再帰は単に末尾位置における再帰呼び出しのことで,TCOを行うかどうかは無関係です. RT @kazu_yamamoto: 末尾再帰とは、関数を飛び出すかもしれないジャンプのことです。スタックを消費しないことが大事。← 僕の理解
2012-03-28 15:02:36@camloeba あれ、突っ込まれると私のボロがでそうですが、JVMの1メソッドの最大サイズ制限が64KBで、メソッドをまたぐジャンプができないから…という問題なので、「ジャンプ先にジャンプ置く」だけでは何も変わらないですよね?
2012-03-28 15:05:22@natsutan 末尾呼び出しは再帰以外の呼び出しも含むのでは?(今twtr開いたので流れ読めてませんが
2012-03-28 15:10:46@nyaocat 僕も流れ読めてませんが、末尾呼び出しの最適化の特殊な形(飛び先が自分)が末尾再帰の最適化じゃないのって言いたかったです。
2012-03-28 15:11:59@esumii 相互再帰でない末尾再帰を最適化して(Javaの)stack inspectionに影響する場合ってどんな場合よ?と自己ツッコミでボロを出しておく。
2012-03-28 15:12:27.@camloeba 今のところ、相互再帰は一つの関数にして、関数内でジャンプ。関数が大きくてジャンプできないならトランポリン。というのが、現実的だと思います。
2012-03-28 15:12:35まあClojure、普通に再帰書いたら末尾再帰であろうとなんであろうと最適化はされなかったはず。なのでrecurを使いましょうということだけど中で何が起こってるのかは……
2012-03-28 15:13:49