拙作のLispインタープリター「Liyad」においても、 (無いとLisp処理系として格好が付かないので) 非常に限定的に末尾再帰最適化を実装しています。 Liyadにおける末尾再帰最適化 Liyadでは、単純にASTのS式が特定のパターン(1種類)に合致するときのみ末尾再帰最適化を行い、 関数の再帰呼び出しをループに展開します。 パターンの疑似コード: ($lambda (f-arg-1 ... f-arg-N) expr-a-1 ... expr-a-M ($if cond-expr expr-t ($self r-arg-expr-1 ... r-arg-expr-N) )) これを次のようにASTを変換します。 疑似コード: ($lambda (f-arg-1 ... f-arg-N) ($until cond-expr ($clisp-let (tempsym-1 ... tem