On Lisp読書会#2に参加しました。
9:00からという挑戦的な時間でしたが時間通りに着けました!! よくやった自分。以下メモ。
3.3〜3.5節。
- nconcは破壊的。
Break 2 [3]> (setq a '(1)) (1) Break 2 [3]> (setq b '(2)) (2) Break 2 [3]> (setq c '(3)) (3) Break 2 [3]> (nconc a b c) (1 2 3) Break 2 [3]> a (1 2 3) Break 2 [3]> b (2 3) Break 2 [3]> c (3)
- totalは関数内にxを束縛する。
Break 2 [3]> (let ((x 0)) (defun total (y) (incf x y))) TOTAL Break 2 [3]> (total 10) 10 Break 2 [3]> (total 20) 30 Break 2 [3]> (total 20) 50 Break 2 [3]> (total 20) 70
- クォートは危険。Rubyの場合は大体こんな感じ。
irb(main):002:0> @hoge = [] => [] irb(main):004:0> def foo; @hoge end => nil irb(main):005:0> foo << 'abc' => ["abc"] irb(main):006:0> foo << 'abc' => ["abc", "abc"] irb(main):007:0> foo << 'abc' => ["abc", "abc", "abc"]
- 対応は大体こういう感じ。
Lisp : Ruby '(a b c) : [:a, :b, :c] (list 'a 'b 'c) : [:a, :b, :c].dup
- setqとsetfの違い。(setq a 'abc) aはシンボルのみ。setfは関数も使える。例えば、
Break 3 [4]> (setq a '(10 20 30)) (10 20 30) Break 3 [4]> (setf (car a) 1) 1 Break 3 [4]> a
4.3節。
- lastは最後のコンスセルを返す。最後の要素ではない。確かにふつう要素が欲しいよね。