Emacs にはカーソル直前のS式を評価するためのコマンド eval-last-sexp が存在する.
その他,eval-expression や eval-defun など,S式を評価するコマンドはいくつか存在する.
S式の評価結果を用いてS式自体を置換してしまう,ということも実は可能だった.
以下の関数を用いる.
(defun eval-and-replace () "Replace the preceding sexp with its value." (interactive) (backward-kill-sexp) (condition-case nil (prin1 (eval (read (current-kill 0))) (current-buffer)) (error (message "Invalid expression") (insert (current-kill 0)))))
例えば (* 128 128) の末尾で eval-and-replace を実行すると
このS式自体が 16384 という評価結果で置き換わるというわけである.
なかなかうまい発想だと思った.