emacsのbuffer上の数字を演算して置き換えるには

Emacsで編集中に、数値を操作したい時があります。それは、少し複雑な計算を通して変換したいということがあります。そこで、elispで変換して置き換えることを試してみました。

例えば、選択したregionの数値を2倍して置き換える場合は次のようなelispで出来ます:

(defun doubling (beg end)
  (interactive "r")
  (let ( (doubled  (* 2 (string-to-number (buffer-substring beg end)))))
    (delete-region beg end)
    (insert (format "%.1f" doubled ))))

さらに複雑な計算をするには、(doubled (* 2 (….))) の中を変更すればよいです。