/ / 最新

swk's log - Emacs で家計簿ごっこ

2005-11-08

* Emacs で家計簿ごっこ [tech]

Emacs で何かの値段でも,カロリーでも,何でもいいや,何かをリストアップしているとします.

1435
1350
2300
1350

急に合計したくなりました.ただし Emacs しか使えません.さてどうしますかね.

これだけなら lisp interaction に移って

(+
1435
1350
2300
1350
)

とかするのが楽かな.

じゃあ,品名も書いてたらどうしましょう.

a 1435
b 1350
c 2300
d 1350

kill-rectangle/yank-rectangle でいいじゃん,てのは敗北くさいので,ちっと関数でも書きますかね.

(defun tmp-sum2 (xs)
  (if (null xs) 0 (+ (cadr xs) (tmp-sum2 (cddr xs)))))

(tmp-sum2 '(
a 1435
b 1350
c 2300
d 1350
))

2 列の代わりに n 列にするとか,n 列の m 列めにするとか,いろいろ一般化できるけど,nthcdr 使えばいいだけなので省略.

じゃあ,単価と数量だとしてみようか.

a 1435 2
b 1350 1
c 2300 1 
d 1350 5

んー,こうか.

(defun tmp-sp23 (xs) 
  (if (null xs) 0 
    (+ (* (cadr xs) (car (cddr xs))) (tmp-sp23 (nthcdr 3 xs)))))

(tmp-sp23 '(
a 1435 1
b 1350 2 
c 2300 4
d 1350 2
))

何か機械的拡張になってきたな.飽きた.


こういうことをもっとお手軽にできるものって,Emacs にはないのかな.あるいは elisp でもっと簡潔に書けたりするんだろうか.

dismal っていう表計算パッケージがあるらしいけど,ちょっと求めているものとは違う感じ.

最終更新時間: 2009-01-04 15:31


Shingo W. Kagami - swk(at)kagami.org