Haskell

モナモナ言わないクイズ

http://mew.org/~kazu/material/2011-monad.pdf に3つ問題が出されていたので解いてみる。 lwrap, lbind (P. 26) 解答 -- lwrap :: a -> [a] と, しなかったのは -- fwrap :: a -> m a に合わせたので lwrap :: a -> [] a lwrap x = [x] -- lwrap と同様に f…

第5回 スタートHaskell 感想

第 5 回は 10 章, 11 章が対象。10 章は 型とクラスについて書かれている。Haskell で一番特徴的な部分は? と訪ねられたら 型 と答えるかな(今のところ)。 モナド @kazu_yamamoto さんによるモナドのチュートリアル。今回の勉強会における自分の中でのメイ…

第4回 スタートHaskell 感想

今回は8章, 9章が対象。 本を読んでいてわかりにくくなってくるのがここから。でも Haskell として楽しくなってくるのはここから(@ruicc さん曰く)。 パーサー 型 パーサの型は関数。Int とか Char のように値ではなく関数。 type Parser a = String -> [(…

第3回 スタートHaskell 感想

今回はニフティで開催。大森駅には初めて降りた。住宅街とオフィス街が混ざったような雰囲気だった。 発表 資料 http://www.mew.org/~kazu/material/2011-fp.pdf 極意 バグの入り込みにくい小さな関数をつなげて、大きな関数を作る。 速度 length は遅い。あ…

第2回 スタートHaskell 感想

今回は参加者が 100 名以上いた前回までとは違い、50名強の参加者だった。人が少ないなと思ったが、勉強会としては多い方だろうな。 第 1 部 予習してきた部分の発表。発表だけかと思いきや熱い議論が始まる展開に。初心者向けの勉強会と銘打たれているが、H…

第1回 スタートHaskell 感想

会場に着いたのが 19 時 10 分頃。ちょうど勉強会が始まる頃だった。 発表 今回の勉強会の対象の 2, 3, 4 章のまとめの発表。基本的には本に書かれている内容なので新たな発見は少なかった。 コメントはネストできる。 複数行のコメントは {- -} で囲む。コ…

第0回 スタートHaskell 感想

第0回 スタートHaskellに参加した。定員180人のところへ200名以上の参加希望があり、Haskell の人気っぷりがうかがえる。女性もちらほら。Haskellやるとモテるってホントですか? 感想 Haskell山高い! プログラミングHaskell をマスターして、山の 1 合目付近…

Haskell Platform

http://d.hatena.ne.jp/kazu-yamamoto/20110523/1306121040 を読んで、Haskell Platform というパッケージの存在を知った。 今まで個別でインストールしていた Haskell 関連のパッケージを削除して、 Haskell Platform をインストールした。 %sudo apt-get i…

readHex

戻り値の型に関して readHex の戻り値の型がなぜ [(a, String)] になっているのだろう、(a, String) でいいのでは、と思った。 ghci> :m Numeric ghci> :t readHex readHex :: (Num a) => String -> [(a, String)] ghci> readHex "7dbZYX" [(2011,"ZYX")] gh…

Parsec on Ubuntu

Ubuntu で Parsec を使えるようにするためのメモ。 % sudo apt-get install libghc6-parsec3-dev

GHCiのプロンプトをカスタマイズ?

GHCi でモジュールを多くインポートするとプロンプトが長くなり見づらくなることがあります。例えばこんな感じ。 Prelude> Prelude> :m Monad Char List Array Time Ratio IO Directory Control.OldException Prelude Monad Char List Array Time Ratio IO D…

乱数? IO?

1〜6までの数をランダムで返す関数 dice を作ろうとしたが頓挫。 作ろうとした dice の型は次の通り。 dice :: Int Haskell で乱数を扱うにはどうすればよいかと調べていたところ、次のようにすればよいらしい。 getStdRandom $ randomR (1, 6) getStdRandom…

QuickCheck で答え合わせ

プログラミングHaskell の練習問題で QuickCheck を使うのに、ちょうどよさそうな問題があったので試してみた。 問題は、map と filter を使って [f x | x filteredMap :: (a -> b) -> (a -> Bool) -> [a] -> [b] filteredMap f p = map f . filter p 先日 Q…

QuickCheck メモ

QuickCheck はテストケースを自動で作成してくれる、というのを知った。http://d.hatena.ne.jp/kazu-yamamoto/20101027/1288173335。少し試してみた。 install Ubuntu 10.04.1 % sudo apt-get install libghc6-quickcheck2-dev sample code import Test.Quic…

パラメトリック多相

パラメトリック多相とは何かと考えていたら、 関数はパラメータを持ち、これを実際の値に束縛します。Haskell の型はパラメータを持つことができ、これを別の型に束縛できます。 Real World Haskell――実戦で学ぶ関数型言語プログラミング この一文で理解でき…

ついていけません

今年のはじめ頃からのんびり読み進めていた Real World Haskell は現在13章が終わったところ。本の半ばにして、内容についていけなくなった...。とりあえず、この次のモナドの章と、面白そうな部分に目を通したら、はじめに戻ろうかな。 関数型言語難しいで…

:module +Text.Regex.Posix

環境 Ubuntu 9.10 GHCi 6.10.4 問題 Real World Haskell の P.202 に ghci> :module +Text.Regex.Posix と書いてあるが、実行してみると Prelude> :module +Text.Regex.Posix.String Could not find module `Text.Regex.Posix.String': Use -v to see a list…

Real World Haskell 4.6 練習問題

練習問題を解いてみた。

Real World Haskell 4.5 練習問題

久しぶりに Haskell。Real World Haskell の本を買ったはいいがなかなか進まない。まだ 4章。 問1 Maybe型で返すのはいいけど、返されたMaybe型の値をどう扱えばいいかまだわかっていない。 safeHead xs = if null xs then Nothing else Just (head xs) safe…

Graham scan

Real World Haskell の 3章末の練習問題 12 - Graham scan アルゴリズムの実装 - を解いてみた。 import List import Data.Ord -------- 問 9 -------- -- 方向 data Direction = LeftTurn | RightTurn | Straight deriving (Eq, Show) -------- 問 10 -----…

class

Haskell は関数型言語。オブジェクト指向言語ではない。クラスって概念があるとはつゆ知らず。それに気付いたのは、つい先日。 はじめ、Char 同士の比較をするのに Char から Int に変換し、それを比較していた。時間が経つにつれ、変換して比較せずとも直接…

module Char

前のエントリでChar モジュールの実装方法でわからない箇所があった。 そうだ ソース、見よう。 ghciでのソースが見当たらなかったので*1、hugs のソースを見てみた。 ソース % view /usr/lib/hugs/packages/hugsbase/Hugs/Char.hs (略) -- Character-testin…

ghci で module で定義されている識別子の表示 と その他

:browse で指定したモジュールに定義されている識別子を表示する。Char モジュールで試してみる。 Prelude> :browse Char data Char = GHC.Types.C# GHC.Prim.Char# type String = [Char] chr :: Int -> Char digitToInt :: Char -> Int intToDigit :: Int -…

Type and newtype

2 Type and newtype。さて、問題は、私に明確なニュータイプの素養があるかどうかだが。 ん〜、さっぱりだ。type はシノニムで newtype は新しい型をつくるのか。 type type Name = String こう書くと String 型がつかえるところでは Name 型もほぼ使えるら…

List comprehension

Learn Haskell in 10 minutes - HaskellWiki の続き、というか、10分以上かかるので飛ばしたところをやって行こうじゃないかと思うわけですよ。では、早速。 List comprehension リストの内包表記に関して。 1 Examples 複数のジェネレータを書く場合はカン…

Learn Haskell in 10 minutes in Japanese

昨日の日記で参考にしていたページ Learn Haskell in 10 minutes - HaskellWiki は英語だったんだけど、なんだよ、あるじゃん日本語訳が。もっと早く知っていれば、10分で学べたかもしれないのに。 10分で学ぶHaskell - HaskellWiki で、昨日は シングルクォ…

Learn Haskell in 10 minutes

まだ、よちよちある期なので Learn Haskell in 10 minutes - HaskellWiki をやってみる。 2 Simple expressions 数値の計算。累乗は言語構造として取り入れられている。演算子の優先度はどうなっているのだろうか?まぁ、括弧を付ければいいのだが。 文字列…

1st 5sptes

Haskell を学ぶため色々調べてはいるが、いまいち内容が理解できていない。Google 先生は色々教えてくださるっているのに、いかんなくダメ生徒っぷりを発揮。こりゃ、学ぶ方法に問題ありだな。いきなり何か書いてみようとして、わからない事があったら検索し…

ふむ

Haskell わかんねー。何でもそうだけど、いろんなコードをみて、書いて、試してみるしかないのね。 お手本 第2回 多相性(ポリモーフィズム)への理解を深める | 日経 xTECH(クロステック) より repeated f n = \x -> (iterate f x) !! n 何してる? 無名…

ソート

Haskell のサンプルでクイックソートがよく挙げられている。こんな感じ。 quicksort [] = [] quicksort (x:xs) = quicksort [y | y <- xs, y < x] ++ [x] ++ quicksort [y | y <- xs, y >= x] 他のソートはどう書けばいいのだろう?というわけで、書いてみた…