Common Lispで遅延評価

On Lisp15章。マクロで遅延評価を実装

(defconstant unforced (gensym))
(defstruct delay forced closure)

(defmacro delay (expr)
  (let ((self (gensym)))
    `(let ((,self (make-delay :forced unforced)))
       (setf (delay-closure ,self)
         #'(lambda () (setf (delay-forced ,self) ,expr))) ,self)))

(defun force(x)
  (if (delay-p x)
      (if (eq (delay-forced x) unforced)
          (funcall (delay-closure x))
          (delay-forced x))
      x))

これを使う場合

(let ((x 2))
(setq d (delay (1+ x))))

そのままでは評価されない

 d
 #S(DELAY :FORCED #:G748 :CLOSURE #<CLOSURE (LAMBDA #) {12234AF5}>)

forceしてやる

(force d)
3

ProductName On Lisp
ポール グレアム,野田 開
オーム社 / ¥ 3,990 ()
通常24時間以内に発送

「ビジネスプロフェッショナルの仕事力」を読んだ

インタビュー集

最初の三人(御立尚資,本田尚之,勝間和代)が面白かった。このうち後ろの二人は本読んでるから、大体言ってることはわかった。

ProductName ビジネスプロフェッショナルの仕事力
岡島 悦子,日本経済新聞デジタルメディア
日本経済新聞出版社 / ¥ 1,575 ()
通常24時間以内に発送

御立尚資

  • 企画力とヒトを動かす力の両方が大切

本田尚之

  • 時間がないから本を読めないのではなく、本を読まないから時間がなくなる

    • これは転じて「時間がないから論文を読めないのではなく、論文を読まないから時間がなくなる」
  • 半歩先にいる会社にIRの勘所を学んだ

    • これも転じて、半歩先を学ぶために論文を読むのだろう。論文を読んどけばやらなくていいはずの試行錯誤を繰り返すのは時間の無駄だろう。

石田淳

  • 結果だけをもとめてやり方を示さないのは、たとえて言うなら、マラソンのゴール地点だけを示して肝心の道順を示さないようなもの

kwout

evernoteとも連携するらしい。

後で左によるようにレイアウト変えとく。

アマゾンの「おすすめ商品があります病」

アマゾンのおすすめ商品に、見知らぬ本が出てくるのが楽しくて、amazonで購入した本だけでなく、リアルな書店で買った本とか図書館で借りた本も評価して自分のおすすめ商品に情報が反映されるようにしている。

その甲斐あってか、自分の興味にマッチしつつ中古でとてもお買い得な本が結構な頻度で現れてくるようになって嬉しいなぁ、欲しいものリストには中古本のリストがずらずらと並んでいて、お買い得な値段が提示された時にすぐにポチッとおして買い逃さないようになっているし、興味の探索空間も広がってハッピーハッピーうさちゃんまつりじゃぁと喜んでいた。

だが、最近どうも違うような気がしてきた。

自らの意思とは関係なく、アマゾンのシステム側にじわじわと探索範囲を広げさせられてうっかり買わされているんじゃなかろうかと。

アマゾンは使っていくうちに洗脳されていくサービスだ。(Rubyみたいに?)

cam with me見て欲しくなったもの

cam with meは一回楽しむのには良いですな。うちももうすぐ三歳になる娘がいるので、ちょっと感動したうえに超ほしくなりました。

これとこれが。

日常を切り取ろうと思ったら、軽くて起動が速くて編集の手間が少ないやつじゃないとダメですな。運動会とかのイベントじゃあるまいし、ちょっとした散歩でもぶら下げてあるけないとね。あと、光学ズームで20倍くらいは欲しい。

On Lisp 7-11章

あまりのわからなさに一年以上放ってあったOn Lispを再開。マクロの章を出張の新幹線の中で読む。

ProductName On Lisp
ポール グレアム
オーム社 / 3990円 ( 2007-03 )


新幹線のなかだと集中できてよいが、内容の半分も理解できないなぁ。まぁ、何度か読みなおせばいいからとりあえずざっと一通り読むつもり。

今の仕事の流れだとinductive logic programmingを理解してないとまずかろうと思うことがあったので、24章のlispによるPrologの実装まではなんとか進みたい。

「だれかに話したくなる小さな会社」を読んだ

ブランド戦略に関して

これまで一般的に、ブランド戦略とは「デザイン戦略のこと」と理解されてきました。もちろんビジュアル面の強化は「お客さまに上手に伝えること」という点で大切です。でも単に会社のロゴを変えたり、印刷物をオシャレにしたりするだけでは、絵のような 「矢印が内向きの状態」に会社はなっていきません。

会社にまつわる見えない矢印を内向きにしていこうと説いている。

ProductName だれかに話したくなる小さな会社
浜口 隆則,村尾 隆介
かんき出版 / ¥ 1,470 ()
通常24時間以内に発送

相変わらず継続

継続のあたりをうろうろしてますが、先週末に到着したOn Lispの継続の章をつまみ読みしてまたちょっと理解がすすんだような気がしたようなしないような。

ProductName On Lisp
ポール グレアム
オーム社 / 3990円 ( 2007-03 )


最後の方で、

継続

CPS変換を覚えればcall/ccを書くのは簡単だ. CPS変換を経たプログラムでは,全体に対する現在の継続が常に存在し, call/ccはその引数として何らかの関数を呼び出す単純なマクロとして実装できる.

と書いてあるのだが、perl - to goto or not to goto, that's the continuationの先にどうやればperlでcall/ccが実装できるのかわからん。

rubyにはcall/ccがあるらしいですね

そもそもCall/CCがrubyに実装されている理由はただ一つで、「実装できてしまったから」である。

先週読んだ本

フリーター論争

対談集

ProductName フリーター論争2.0―フリーターズフリー対談集

人文書院 / ¥ 1,680 ()
通常24時間以内に発送

右とか左とかそういう話はちょっと苦手なのでそこらへんの対談は流したのだけど、富士通本の著者の対談は面白かった。まぁ、マクロに眺めててもあんま役に立たないんだけども、いま置かれてる状況を客観的に考えられるのはよいな。

コミュニティカフェをつくろう

ProductName コミュニティ・カフェをつくろう!

学陽書房 / ¥ 1,890 ()
通常24時間以内に発送

想定してたのとはかなり違ってボランティアとかそっちの。

グーグル

ProductName グーグル―Google 既存のビジネスを破壊する 文春新書 (501)
佐々木 俊尚
文藝春秋 / ¥ 798 ()
通常24時間以内に発送

ブックオフ100円本。

lispでスパムフィルタの実装 (実践Common Lisp 23章)

単語の特徴を表すクラスを作って、ベイジアンフィルタを実装していく。

ProductName 実践Common Lisp
Peter Seibel
オーム社 / ¥ 4,410 ()
通常24時間以内に発送

  • print-unreadable-objectを使うと印字方法を変えられる。pythonでいう__str__メソッドみたいなものか。
  • caseとecaseの違いがわからん
  • reduceは:keyを受ける

最後のヤツは対数の総和をとるのに

(reduce #'+ probs :key #'log)
# reduce(lambda x,y:log(x)+log(y),list) ;python

こんな風に書くことが出来る。