前の日 / 次の日 / 最新

swk's log

2005-11-08 Tue

* 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 っていう表計算パッケージがあるらしいけど,ちょっと求めているものとは違う感じ.

<< 2005-11 >>
SuMoTuWeThFrSa
12345
6789101112
13141516171819
20212223242526
27282930

2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2001 : 01 02 03 04 05 06 07 08 09 10 11 12
2000 : 01 02 03 04 05 06 07 08 09 10 11 12
1999 : 01 02 03 04 05 06 07 08 09 10 11 12
1998 : 01 02 03 04 05 06 07 08 09 10 11 12
1997 : 01 02 03 04 05 06 07 08 09 10 11 12
1996 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2012-02-13 02:02


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