14:07:13 [g888881'in]
14:08:04 <g888881> 今日も「対話によるCommon Lisp入門 http://www.amazon.co.jp/dp/4627836007」を読んでメモを垂れ流します
14:09:29 <g888881> 8話からは、第II部 発展的な対話 になります
14:09:45 <g888881> こっからは、ansi clで盛り込まれた機能を使っていくらしいです
14:09:55 <g888881> (((( 第II部 発展的な対話 - 第8話 関数の柔軟な仕様 ))))
14:19:48 <g888881> 引数の&optional・&rest・&keyの説明と、多値の説明です
14:20:32 <g888881> ここは普通な感じですね
14:22:06 <g888881> コラムにsetqと、set+quoteの比較がちょっとあったりします
14:23:07 <g888881> (((( 第II部 発展的な対話 - 第9話 関数型プログラミング ))))
14:37:39 <g888881> 関数がファーストクラスであることを利用したプログラミングの解説、というところでした
14:38:04 <g888881> スコープについても説明があり、ちょっとだけクロージャーとレキシカルスコープの説明があります
14:38:14 <g888881> ここも割と丁寧に思いました
14:40:10 <g888881> (((( 第II部 発展的な対話 - 第10話 命令型プログラミング ))))
15:05:36 <g888881> タイトルの通り命令型なプログラミング手法の解説です
15:06:14 <g888881> 主に副作用を目的に使うsetf・incf等の〜f系の説明があります
15:06:30 <g888881> 加えて、loopマクロの説明が結構あるのですが、
15:06:48 <g888881> loopの構文がansi clのloopでないので残念ですねー
15:06:50 <g888881> (defun gcd! (m n)
15:06:51 <g888881> (loop :collect (list m n) :into seq
15:06:51 <g888881> :until (= (mod m n) 0)
15:06:51 <g888881> :do (psetf m n
15:06:54 <g888881> n (mod m n))
15:06:56 <g888881> :finally :return (values n seq)))
15:07:04 <g888881> みたいなのが通るようなのですが、これはansiでは無理なんですね
15:07:23 <g888881> (defun gcd! (m n) (loop :collect (list m n) :into seq :until (= (mod m n) 0) :do (psetf m n n (mod m n)) :finally :return (values n seq)))
15:07:43 <g888881> 処理系によっては、
15:07:46 <g888881> (defun gcd! (m n) (loop :collect (list m n) :into seq :until (= (mod m n) 0) :do (psetf m n n (mod m n)) :finally (return (values n seq))))
15:08:47 <g888881> とすれば行けるかもしれません(MIT系のloopを使っている場合)
15:09:43 <g888881> MIT系のloopは自分の知る限りでは、CCL・Allegro CL等かなと思います
15:11:44 <g888881> いや、MIT系のloopじゃなくても行けるかもしれないですねw
15:12:25 <g888881> とりあえずのところは、finally return exp というのは、finally (return exp)にする必要はありますね
15:12:56 <g888881> このloopは、PAIPに載ってるloopなんでしょうか
15:14:32 <g888881> 10.34で、finallyの直後が(return ...)のとき、それを囲むかっこは省略できます というのがANSIでは省略できないってところですね
15:18:15 <g888881> 章末のコラムにマクロの話が出てきますが、どういう時に必要になるかという話だけのようです
15:18:29 <g888881> どうもこの本はマクロの定義の解説はないみたいですね
15:20:49 <g888881> ということで、今日は10話までで、明日は11話からということにします
15:20:57 [g888881'out] ; Quit: ERC Version 5.1.2 $Revision: 1.796.2.4 $ (IRC client for Emacs)
21:26:52 <usaturn> お疲れ様ですー