tco.el は、関数の末尾再帰を行うパッケージです。 末尾再帰というのは、関数呼び出しの自分自身を最後に再帰呼び出しする再帰パターンです。 関数型言語では定番の手法で、Schemeでは実装仕様で末尾再帰を要求してくる言語です。 それをループに置き換えることで末尾再帰の最適化が行えます。 最適化を行えばstack overflowを防げます。 defunの末尾再帰バージョンともいえる defun-tco マクロを使います。 これがあればSchemerら関数型言語ガチ勢もEmacs Lispを楽しめますね!!! ;; -*- lexical-binding: t -*- (require 'tco) (setq lexical-binding t) ;;; 1〜nの総和 (Σ(k=1..n) k) (defun-tco sum (n &optional accum) "末尾再帰バージョン"