Haskell

GHCとHugsのdo式とif式に関するインデントの違い

まず,以下のコードはインデントが正しくない. main = do if True then putStrLn "hoge" else putStrLn "fuga" http://haskell.g.hatena.ne.jp/muscovyduck/20060817 などでも間違ってると書いてある.しかし,なぜかHugsでは動く.GHCiではインデントが間…

Haskellで切符問題(2):木の生成

Haskellで切符問題(1) の続き. 木の生成部分を「演算子を含まない木を作成→演算子を反映」と2パスだったのを1パスに修正したもの.行数が約半分になった. module Ticket where import Char data Term = Val Char | App Char Term Term trees :: [Char] -> …

Haskellのモジュール名とファイル名の関係

階層的モジュールのファイルパスに関しては Haskellの階層的モジュール を参照. 例えば,モジュール名がMで,ファイル名がF.hsだったらどうなるの,という話. 予想:モジュール名とファイル名が違うものをimportしようとすると「見つからない」というエラ…

Haskellのマルコフ連鎖アルゴリズム(2)

Haskellのマルコフ連鎖アルゴリズム(1) の続き.run関数について見ていく. run n dict start g = let keyError = error "key is not contained in dictionary" fm = createMap n dict y = take n (drop start dict) ++ (flip evalState g $ mapM (randomIte…

Haskellの階層的モジュール

http://www.kotha.net/ghcguide_ja/latest/syntax-extns.html#hierarchical-modules に, GHCは、モジュール名の構文について、ある小さな拡張をサポートしている。すなわち、モジュール名はドット「.」を含むことができる。これは「階層的モジュール名前空…

HugsとGHCiの:findについて

Hugsの:findに対応するコマンドがGHCiにないっぽい.てことで,Ubuntu10で:findやろうとしたら,Hugs is not configured to use an editorと怒られた.http://www.haskell.org/pipermail/hugs-bugs/2001-February/000117.html に修正方法が書いてあった. Pr…

iterate関数

「次に進む」関数と初期値をもらって無限リストを作る関数. Prelude> :t iterate iterate :: (a -> a) -> a -> [a] Prelude> take 10 (iterate (2*) 1) [1,2,4,8,16,32,64,128,256,512]

Haskellのマルコフ連鎖アルゴリズム(1)

記事が長くて読みにくくなったのでHaskellのマルコフ連鎖アルゴリズム(2)に続く.http://hackage.haskell.org/package/markov-chainソースをダウンロードして,解凍してghicの:lでロード. Prelude > :l MarkovChain.hs [1 of 1] Compiling Data.MarkovChain…

HaskellのRandomモジュールについて

mkStdGen 乱数生成器を作るためのコマンド.Int型を引数に取りStdGen型(乱数生成器)を返す. Prelude Random> :t mkStdGen mkStdGen :: Int -> StdGen ちなみにStdGen型は以下のような定義. data StdGen = StdGen Int32 Int32 実際に使ってみると以下のよう…

Wikiエンジンの開発12章(1)

ファイル構成 章は http://www.loveruby.net/ja//stdhaskell/samples/ に対応. 章 ファイル名 役割 12 CGI.hs 12 CGIMain.hs 12 Config.hs 12 Database.hs 12 FileUtils.hs 12 LazyLines.hs 12 PathUtils.hs 12 Template.hs 12 TextUtils.hs 12 URLEncoding…

Stateモナド

http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258229/ より. newtype State s a = State { runState :: s -> (a, s) } instance Monad (State s) where return a = State $ \s -> (a, s) m >>= k = State $ \s -> let (a, s') = runState m s in r…

SOEのソース(lhs)の>と<の意味

""ってなってるのは実行可能なやつ."

関数適用の結合力

演算子より強くて左結合ってことしかわからず.

data,newtype,typeについて

type 既存の型を別の名前にしただけ.再帰はできない. data 完全に新しい型を定義する.再帰はできる. newtype 既存の型を使って新しい型を作る.再帰はできる.

15.4:Extensions

withElem関数 cycle関数 リストを繰り返して無限リストにする関数. Prelude> :t cycle cycle :: [a] -> [a] Prelude> print $ cycle [1,2,3] [1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3, ... snd関数 2項組のタプルの第二要素を取り出す関数. Prel…

Predicate(述語)とはなんぞや

http://www.kab-studio.biz/Programing/Codian/STL/02.html より. 関数オブジェクトの中には「プレディケート( predicate )」と呼ばれるものがあります。日本語では「述語関数」とか「述語オブジェクト」とか呼ばれています。プレディケートを使うアルゴ…

九九を表示するプログラム

http://d.hatena.ne.jp/kazu-yamamoto/searchdiary?of=90&word=*[Haskell] をちょろっとみて,気になったので書いてみた. まずは九九の1〜5までをリストで生成.mapと再起. kuku :: (Num a) => [a] -> [a] -> [[a]] kuku [] ln = [] kuku (x:xs) ln = (map…

アドホック多相

型クラスにもとづき,型によって振る舞いを変えることをアドホック多相と呼ぶ.14,15行目の(==)は異なる実装が呼ばれている. data Fruit = Apple | Orange data Vegetable = Watermelon | Carrot instance Eq Fruit where Apple == Apple = True Orange ==…

Maybeモナドの中身を取り出す関数 fromJust

メモ. module Maybe fromJust(return "foo") → "foo"

liftM関連

liftMは関数の出入り口をどっちもモナド形で拡張する. liftM :: (Monad m) => (a1 -> r) -> m a1 -> m r liftMの使用例 http://void.yamicha.com/blog/?mode=lite_view&number=646 より. import Control.Monad str = return "Haskell"::Maybe String main …

1章P1:Tree型の表示について

http://fop.sampou.org/chap01.html に載ってるものの説明. import qualified Data.Tree as T data (Ord a) => Tree a = Null | Fork a (Tree a) (Tree a) drawTree :: (Ord a, Show a) => Tree a -> String drawTree = T.drawTree . conv where conv Null …

1章P2:isEmptyなどのメソッドでコンパイルエラーが出る問題

http://fop.sampou.org/chap01.html に理由が載ってた. data (Ord a) => Tree a = Null | Fork a (Tree a) (Tree a) の (Ord a) のように制約をつけて型宣言をすると,「この型の値を引数とする関数すべてがこの制約を満たさなければならない」と書いてある…

1章P1:Ordクラスについて

data (Ord a) => Tree a = Null | Fork a (Tree a) (Tree a) を見て,Ordクラスってなんだっけとか恥ずかしいことになったのでメモ.ちなみに,(Ord a) => の部分は http://fop.sampou.org/chap01.html 曰く, 「ここでの,(Ord a)という制約は二分ヒープ木…

HsColorを使って.hsを.htmlに変換

インストール $ sudo cabal install hscolour 使い方(3パターン) コンソールに色つきのソースコードを出力(htmlではない) $ HsColour sample.hs htmlとして出力(cssなし) $ HsColour -html sample.hs > sample.html htmlとcssを出力 $ HsColour -print-css >…

Haskell版SPIE

見つけたと思ったけど,肝心のソースのダウンロードページがリンク切れだったという. 1個1個ダウンロードすればいいんだけど,めんどくさすぎる. CVSリポジトリもリンク切れになってるしやる気なさ過ぎ. http://cvs.haskell.org/cgi-bin/cvsweb.cgi/progr…