2015年2月25日

ポール・グレハムの気持ちが

微かに、僅かに、微塵ほど、分かる気がする
defunとかdefmacroとかの理解がいわゆる「関数定義」や「マクロ定義」程度で終わっていると本当にもったいない気がする
もっともっと勉強したほうがいいかもしれない
Common Lispは知れば知るほどその恐ろしいほどの奥深さに戸惑うとともにいままで使ってきた他のプログラミング言語の威力の弱さに驚く
たしかダグ・ホイトだったと思うけど、Lisp以外の言語はLispの機能を削ぎ落したものだと、ある言語はLispのこれを取り除いたもの、別の言語はこの機能を取り除いた、とかそんなようなこと言ってた気がするけど、本当そのとおりだわ
びっくりする
少しづつだけどLisp勉強してよかったと思うよ
こんな素晴らしい言語を使って仕事ができたらなんて素敵なことだろうと思うけどlet over lambdaのキャッチじゃないけどこんなことやっているプログラマってホント何百人に一人とかそんなレベルなんじゃないのかな
頭のなかでこんなことできればいいのにというアイデアが形にできそう、できる言語って他にあるか
否、ない、Common Lispこそ唯一の頂点だと思う
素晴らしい
(読み返してみるとlisp信者丸出しでキモいことこの上ないですね)

アンダースタンディングコンピュテーションの感想の続き2

スモールステップ意味論ひと通り実装してみても結局なにが言いたいか理解できたのが30%くらいかな
少しづつ、一歩づつ評価を繰り返して小さくしていくということが言いたいのか
確かに最後のwhileの繰り返しは少しだけ思っていたことと違うと言うか繰り返しってもっとあっさりと実装できるかと思っていたら意外と手間がかかっていると言うか

まあなんにしても結局普通の会社や仕事ではなんの役にも立たない、こんなことやってるよりもググってコピペでプログラム作ってはいできましたって人のほうが役に立つと思われるんだろうけどさ
さもできる風に装っておいてどっかから拾ってきたプログラムを貼り付けてごちゃごちゃやってごまかしている人たちには無縁の話だろうな

アンダースタンディングコンピュテーションの感想の続き

足し算、掛け算演算を実装して、改めて実感できたことはやっぱり中置記法のアホさというか前後置記法の素晴らしさが際立っておりますね
演算子の優先順位とか結合法則なんて話を複雑にするだけで何一つ良いことないのになんでこんなアホな記法が世に蔓延っているのかまったく理解不能
演算子の左右にしか、しかも左右両方に対象を配置しなければ演算子として成立しないなんて本当にアホ丸出し
せっかく偉大なヤン・ウカシェヴィチが発見してくれたものを生かせない人類ってなんてアホの集まりなんでしょうか
大体さ、式なんて正確に記述できるかどうかだけが重要でさ、記述しやすければもうなんでもいいような気がするのだけど
本当、心の底から思うのだけど優先順位とか結合法則とか余計なもの持ちだして、人類はアホの集まりだからただでさえ悪い頭を余計なことに費やしてさらに悪くしているってなんてアホな集団なんでしょうか
ジョン・マッカーシー、ヤン・ウカシェヴィチこそが人類の希望だったと断言できる

2015年2月24日

アンダースタンディングコンピュテーションを読んで

アンダースタンディングコンピュテーションを読んで早速感化されてcommon lispでsimpleを実装してみました

githubで公開しております

https://github.com/andomasaharu/simple

しかし、この本を読んでいる人って日本に何人くらいいるのだろうか
オライリーで売れた数とかわかるのかしら
出版物だと印税の関係でどれだけ売れたか正確に把握する必要があると思うのだけど公表はされないだろうな

「スモールステップ意味論」と翻訳されておりますが実際、原始的と言うか単純な言語を実装してみてつくづくコンパイラの有り難みが身にしみてわかった気がしますね

やっぱり改めてですけどCommon Lispは偉大だなと思った
って言うかやっぱり中置演算うざいよ
ポーランド記法最高と再認識できたことが良かったです、とりあえず
Lispの文法って圧倒的に偉大だよな

2015年2月23日

CLOSについて

もちろん:accessorで生成される関数も多態させられるんだな
やっぱりもちろんだよね、当たり前だよね
:accessorが多態させられなかったとしたらとんでもないことだよな
CLOSってなんなんだよって感じになっちゃうもんね

ドット対って「.」の左右にスペースが必要なんだと今更知りました
ごめんなさい、もっと勉強します

2015年2月22日

CLOSを使った感想

defmethodと組み合わせると多態性が表現できて素晴らしい
いまのところ継承とか登場しないから快適
多態性のみ利用できるので素晴らしい


make-instance 〜〜って言うのがイチイチ面倒だからインスタンス生成の補助関数が必須か
って言うかいわゆるメンバ変数の参照が本当に面倒だ
いわゆるメンバ関数の呼び出しもグローバルな関数呼び出しだから
オブジェクト->メンバ
的な呼び出し方ができるといいのに
リードマクロでやるなら
(#@インスタンス->アクセサ)
とかになるんでしょうか
幸いCommon Lisp使っているので、マクロでなんとかできないもんかね
普通の人(OOPは実装の継承とカプセル化がすべてだと思っている、世の多数派のこと)がCLOSのdefclassとdefmethod見たらなんじゃこりゃって思うだろうな
Common Lispでカプセル化だったら高階関数使ったほうが圧倒的に便利だろうし


CLOSで多態させたときのデバッグと言うかどのdefmethodが呼ばれてエラーになっているか分かりづらかった印象がある
これはCLISPのデバッガの使い方がイマイチわかっていないところが大きな原因だと思うけど



まあでも不満点はIDE的なサポートがあれば別にどうってことないような
インスタンスから呼び出せるdefmethodリストも列挙するのは簡単だろうし
VC++のように背後でコンパイラが動きまくってdefmethodされているオブジェクトのテーブルでも作っていま記述しているインスタンスから呼び出されるであろう関数のリストを作るのは容易にできそう


defmethodのいいところは、特定のクラスで判別して呼び出す関数を振り分けられるのと合わせてhaskellのガードのotherwise的なその他を設定できるところだな
この動作は素晴らしいとしか言いようがないです
c#では真似のできない芸当、本当に素晴らしい
defmethod作った人は本当に頭がいい人なんだろうなと思う

2015年2月3日

common lispをどうやっているか

hyper spec参照
めちゃくちゃ充実しているリファレンス
(microsoft系の人へ:msdnなみの充実度)

clispのreplでお試し
hyper spec参照してそれを試す
引数の順番とかすぐ忘れるから

実践common lispで勉強
入門に向いていると思う

land of lispは指向が違うかな
プログラミンが好きになるためのとっかかりや、他の言語やっていてcommon lispスゲーってなるためには向いているかもしれませんが入門には向いていないかも
いわゆる「common lispにしかできないこと」が書いてある感じ
だから事前に他の言語を知っておいた方が楽しめる本だと思う

on lispでモチベーションアップ
これを読むと、とりあえずマクロが作ってみたくなる
けど、実用的なマクロは作れない
マクロも実践common lispのマクロの方が理解しやすいものが多いと思う
って言うかこれを読むためにはcommon lispがそれなりに使いこなせないと理解するのはなかなか難しいと思う

let over lambdaで混乱する
on lispより強烈な本

armでなにかcommon lispがまともに動かせるといいな




なにに使っているか
プログラミングコンテスト系の問題を解くためのみ

使い心地は?
IOがないならHaskellの方がいいかな
HaskellはIOがあると大変苦労するので
(問題の回答とIOで半々くらいの時間を使うので)