あどけない話

Internet technologies

2008-09-01から1ヶ月間の記事一覧

GHC と UTF-8

GHC が、どう UTF-8 を扱うか調べてみました。 コードへの埋め込み 文字列リテラルに UTF-8 が使えました。 str = " システム " どう扱っているのか、確かめてみます。 import Data.Char map ord str → [32,12471,12473,12486,12512,32] Char は1バイトでは…

モナド則再び

モナド則が未だに分りません。しかし、ちょっとだけ理解が進んだのでメモしておきます。 復習 まず、「モナドのすべて」から、モナド則を引用します。 return x >>= f == f x m >>= return == m (m >>= f) >>= g == m >>= (\x -> f x >>= g) 最初の規則は re…

文章の書き方

2006年に IIJ の新人研修で「文章の書き方」という講義を担当しました。そのときの資料を何人もの人に個別に差し上げていたのですが、それも面倒になってきました。新人研修の担当者に問い合わせたところ、公開しても問題ないとのことでしたので、資料を公開…

モナドと再帰

モナドの再帰も、順を追って考えるとそれほど難しくないというお話です。 string Parsec の string について考えます。 string :: String -> Parser String string "" = return "" string (c:cs) = do char c string cs return $ c:cs char c は、c を返すの…

モナディック・パーサー

「ふつうのHaskellプログラミング」や 「構文解析結合子」の元ネタは、どうやら「Monadic parsing in Haskell」のようです。(さらに元ネタは Parsec ですかね。)このオリジナルは、MonadPlus の部分などが古くさいのですが、分りやすいです。というわけで、…

HaskellでRSA

Haskell には Integer があるので、RSA の計算は簡単なのではと思い立ち、作ってみました。RSA の計算方法や、RSA129 を知らない人は、まず「はやわかりRSA」を読んでみましょう。 暗号化と復号化 x^exp (mod n) を高速に計算する関数を実装できれば、暗号化…

Haskellチュートリアル

先週、僭越ながら Haskell チュートリアルをやりました。その資料を公開します。 Haskell プログラミング 〜 純粋関数型言語への誘い〜

自然数の無限リストはInt?それともInteger?

Haskell で、自然数の無限リストは [1..] と書きます。でも、本当に無限なのか、疑問を持っていました。型が Integer ではなく、Int であれば、上限があるからです。ghci で型をチェックしても、なんだかよく分りません。 Prelude> :t [1..] [1..] :: (Enum …

HaskellでScheme

ついに、Write Yourself a Scheme in 48 Hoursをやりました。 分ったこと 以下のことが、なんとなく分ったり、少なくともどう使うのかを体験できました。 エラー処理 正常系の値と異常系の値を包含する型を作って、Scheme の関数はそれを返すようにする モナ…

どうしてこんなキーワードがあるの?

C

昨日、友達と呑んでいて、「C の switch、do-while、union を使ったことがない。どうしてこんなものがあるのか?」と聞かれました。その場で説明したんですが、「あどけない話にも書いて」と言われたので、書いておきます。(あまり、乗る気ではないのですが…

Lispと○キブリの共通点

LL Future で話題に出されたのは、これかぁ。 Lispと○キブリの共通点

すご過ぎるとおもちゃに見える

「達人プログラマー」の14ページでは、「毎年少なくとも一つの言語を学習する」ことが提案されています。達人プログラマー―システム開発の職人から名匠への道作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章出版社/メーカー: …

横向きのピラミッドを作る

LL Futureの「キミならどう書く?」に出題されている問8を Haskell で解いてみます。 与えられた自然数 n について、横向きで n 段のピラミッドを作ってください。たとえば、 n に 4 が与えられた場合は以下のようなピラミッドを作ります。 * ** *** **** **…