私が知る限り、Clojurerecur
はコンパイラによってサポートされていますが、他の Lisp では低レベルで実装されています。
私が読んだように、これは「一般的な」TCO ではありません。明白なこと (キーワード + チェックが必要) は別として、何らかの方法でrecur
それほど強力ではありませんか?
私が知る限り、Clojurerecur
はコンパイラによってサポートされていますが、他の Lisp では低レベルで実装されています。
私が読んだように、これは「一般的な」TCO ではありません。明白なこと (キーワード + チェックが必要) は別として、何らかの方法でrecur
それほど強力ではありませんか?
recur
一般的なTCOのサブクラスである末尾再帰の最適化のみをサポートします。Clojureは、を介した相互再帰または間接再帰もサポートしますtrampoline
。
編集
また、一般的なTCOはJava 7を使用してJVMに到達することが期待されて私はそれをProjectLambdaの(Javaでクロージャを追加する)スケジュールと混ぜ合わせましたrecur
おり、一時的な解決策として意図されていたと思います。その後、Oracleが発生しました。
recur
recur は、ループと関数の両方で機能し、TCO の完全な実装で行われることのいくつかを実行しないという点で、完全な TCO とは少し異なります。これに対する哲学的な裏付けは、統一された構文を静かに最適化するのではなく、特別な部分を特別に見せることです。