Emacs Lisp
これは、split-window-vertically (前のウインドウ分割関数) を呼び出し、新しいウインドウが別のバッファを表示するようにする。次の文 (global-set-key ...) は、「C-x 2」というキー列に新しい関数を結び付けなおす。
もっと簡単に書く方法もある。Emacs Lispには「advice」という強力な機能があり、利用者は既存の関数を再定義せずに新しいラッパーを作れる。「advice」を使うと、上のコードは、次のように再実装できる。
これは、split-window-verticallyが呼び出されたとき、関数の本体を実行する前に利用者の指定したコードを実行するよう命令している。
こういった変更は、たとえば「M-x eval-buffer」コマンドを使ってコードが評価されてはじめて効果が生ずる。Emacsの再コンパイルはおろか再起動さえいらない。Emacsのカスタム化は便利だといわれる所以である。もしEmacsの「立上げファイル」(ふつうは利用者の ホームディレクトリ にある「.emacs」という名前のファイル) にコードを保存すれば、次にEmacsが立ち上がったとき、Emacsはこの拡張を読み込むことになる。
「cl」パッケージは、Common Lispのサブセットとしてはかなり大規模な実装であり、注目に値する。
Emacs Lispは、静的でなく (字句的でもなく) 動的スコープを使う。したがって、もし変数がある関数のスコープで宣言されると、その関数から呼び出されたサブルーチンにおいても有効になる。これはもともとは、利用者のカスタム化のための高度な柔軟性を提供するためのものだった。しかし、動的スコープには短所がいくつかある。第一に、別々な関数の変数間での不本意な相互作用のため、大きなプログラムではバグを簡単に生じやすい。第二に、動的スコープ下での変数アクセスは、字句的スコープのそれより、一般に遅い。そのため、Emacs Lispを字句的スコープに変換する、という計画が立てられたが、まだ完了はしていない。「cl」パッケージのlexical-letマクロは、Emacs Lispのプログラマに効率的な字句的スコープを提供している。「cl」はよく使われているが、lexical-letはめったに使われない。
Emacs 24 では静的スコープが使えるようになった。
Emacs Lispは、他の多くのLisp実装でおこなわれている末尾再帰の最適化をしない。最適化されていない末尾再帰は最終的にスタックオーバーフローに至る可能性がある。