たくさんの数の足し算するなら

やっぱLispだな。数と数の区切りがスペースでいいから打つのが楽。 Emacsを起動したまへ。*scratch* バッファですぐに Lispインタプリタが利用できる。おもむろに、

(+ 1 2 3 4 5 6)

と打って C-j をタイプする。はい結果が出てきたアルヨ。 + を打つのが一回でいいしスペースで区切れるから さくさく入力できるアルネ。

てなわけで、現在大量に採点中なのであった。平均点、最高点、最低点 を見たくなったので *scratch* バッファにこんな風に 書き込んだ。

(let*((p '(1 2 3 4 5 6))
      (n (length p))
      (s (apply '+ p)))
  (format "av=%f, max=%d, min=%d"
	  (/ s (float n)) (apply 'max p) (apply 'min p)))

let* は局所変数の宣言。let* 印を付けると宣言中に使っている変数がその後の 宣言で使える。apply は、第1引数に関数を指定して、 その関数に第2引数以後のリストを開いた引数を渡して評価する。 むずいね:-) 要するに (apply '+ p) としたら

(apply '+ '(1 2 3 4 5 6))
  ↓
(+ 1 2 3 4 5 6)

のようにリストを展開して + 関数に渡してくれる。 あら便利。

ま、ここまでやんなくても電卓代わりに Emacs なんか使うと かちょええですよ。1 + 2 * 3 だったら

(+ 1 (* 2 3)) C-j

てなぐあい。ほんでわ。


Generated with mkdiary.rb
yuuji@example.org
Fingerprint16 = FF F9 FF CC E0 FE 5C F7 19 97 28 24 EC 5D 39 BA
HIROSE Yuuji - ASTROLOGY / BIKE / EPO / GUEST BOOK / YaTeX [Tweet]