ハッカーと画家 コンピュータ時代の創造者たち

ハッカーと画家 コンピュータ時代の創造者たち

ハッカーと画家 コンピュータ時代の創造者たち

監訳者あとがきに

『普通のやつらの上を行け』を読んでLisp処理系を起動してみたプログラマはもっとずっと多いだろう。

とあったのでLisp処理系であるemacsを起動して13章の付録を写経してみました。

(defun foo (n) (lambda (i) (+ n i)))
>foo
(setq foo2 (foo 1))
>(lambda (i) (+ n i))
(funcall foo2 1)
>2
(funcall (foo 1) 1)
>2

このnがレキシカル変数なのかな。

Rubyだとこう。

$irb
>> def foo(n)
>> lambda {|i| n += i} end
=> nil
>> f=foo(1)
=> #
>> f.call(1)
=> 2
>> foo(1).call(1)
=> 2

この例を見る限りRubyLispに似ている。そしてJavaだとこの例を書くには無名クラスとinterfaceを使うことになる。Java脳になっているとRubyのブロックは理解しにくいが、本質的には無名関数と高階関数がよくわかってないということだろうな。そのあたりを学ぶにはJavaScriptはいいかも。ブロックスコープが無いけど。