らんだむな記憶

blogというものを体験してみようか!的なー

はぢめてのHaskell(5)

Chapters - Learn You a Haskell for Great Good!を読んでみる。category に疲れたとも言う。
英語だけど3ページくらい読んでみた!段々面倒になってきたので和訳本にしたい...。でも漬物石まっしぐらだしー・・・

さて、ちょっと知ったら適当に試すのがわりと好きだ。説明書は基本読まない!!もちろんマザーボード+グラボを異常電流でぶっとばしたこともある!!お陰で諭吉も財布からぶっとんだ!!CPUのピンが折れたこともある!!宗教上の理由で基本的にドキュメントは読めない身体なのである!!

では、hogeってみよう。

Prelude> let hoge x = x*5
Prelude> hoge 3
15
Prelude> hoge 3+1
16
Prelude> hoge (3+1)
20

おっと... まじか...。これは「(hoge 3)+1」になっているな...。
rubyでも見てみよう。

irb(main):001:0> def hoge x; x*5; end
=> nil
irb(main):002:0> hoge 3
=> 15
irb(main):003:0> hoge 3+1
=> 20
irb(main):004:0> hoge (3+1)
=> 20

うほっ、結合順序が違う...。

気を取り直して、素数を求める関数を作ってみよう。まぢめに読んでないのでローカル変数の定義の仕方が分からない...。
[prime.hs]

prime x i = do
    if i >= x then
        True
    else
        if x `mod` i == 0 then
            False
        else
            prime x (i+1)

なんかカッコ悪いな...。ローカル変数が分からないので関数の引数でインクリメントするナニを渡すとか。つまり毎回「prime x 2」で使うというバカ仕様で実装。再帰の部分も「(prime x i)+1」で解釈されると「Bool + Integer」とか舐めとんのかワレー?という感じなのか怒られるし、「i += 1」とかもダメだったんで、何か変な書き方してみる。
でもコンパイルできた!(つまりできるまで書き直しまくったらこうなった...)

Prelude> :l prime
[1 of 1] Compiling Main             ( prime.hs, interpreted )
Ok, modules loaded: Main.
*Main> [x | x <- [2..100], prime x 2]
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]

で、100以下の素数を列挙させてみた。ちゃんと読んでから試せよってな超絶糞コードになった(´∀`;;;

―――――・・・

そんなドキュメントを読まない自分だが、本棚には少々古い版ではあるが StroustrupC++ の本を飾っている。何故か?
Stroustrup の本のp.XXXによると、こうなってるね。ん?Stroustrup かい?C++を創ったおじさんだよ。この本ね、コレ」とかあのくっそ分厚い "辞書" を片手に言っとけば Stroustrupの威を借る狐として、非常にもっともらしくドヤ顔できるからだ!勿論英語版なので、ぱらぱら捲って見せれば良い。ちょっと音読してあげても良いかもしれない。80%くらいはコレで黙ってくれるだろう。面倒な議論も避けられる。議論は嫌いだ。
Stroustrup先生の名前を出した時、一体どれだけが「いやいや、Stroustrup の本にそう書いてあるからってこのケースでも正しいとは限らないでしょ?」と返してくるだろうか?たまに返してくるやつがいればソイツはなかなかデキるやつなので、神妙な顔で「なるほど。君の考えを聞かせてくれないか?」と相手に考えさせれば良い。自分は頭を使わない。
やはり大御所の本は持っておくに限るよ、ちみぃ。