Entries from 2010-09-01 to 1 month

並行と並列の違い

別の人のtwitterつぶやきより並行と並列について、『続 新しいプログラミング・パラダイム』では「並行はとにかく複数の仕事が同時に実行されること、並列は複数の処理主体によって複数の仕事が同時に実行されること」というように説明されていた。並列は物…

dvipdfmxのオプションで用紙サイズ指定する方法

B5に指定 dvipdfmx -p b5 takeuchi

オサレマクロ

#define ever (;;) for ever {...} #define love printf("love") for ever love;

ライフゲーム

cls :: IO () cls = putStr "\ESC[2J" type Pos = (Int,Int) goto :: Pos -> IO () goto (x,y) = putStr ("\ESC[" ++ show y ++ ";" ++ show x ++ "H") writeat :: Pos -> String -> IO () writeat p xs = do goto p putStr xs seqn :: [IO a] -> IO () seqn…

Emacsの設定

.emacs の設定を記しておく. (setq initial-frame-alist (append (list '(width . 45) ;; ウィンドウ幅 '(height . 30) ;; ウィンドウ高さ ) initial-frame-alist)) ;;haskell-mode (load "~/lib/elisp/haskellmode-emacs/haskell-site-file") (add-hook 'h…

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

http://www.ipsj.or.jp/07editj/promenade/4605.pdf より.まずはリストから計算木へ変換するプログラム. module Ticket where import Char data Term = Val Char | App Char Term Term trees :: [Char] -> [Char] -> [Term] trees ds os = [ t | (_,t) <- …

Haskellの機能拡張:UnicodeSyntax

http://d.hatena.ne.jp/kazu-yamamoto/20081022/1224668653 などより. {-# LANGUAGE UnicodeSyntax#-} 以下の6つのみあるらしい. 標準 UnicodeSyntax :: ∷ => ⇒ forall ∀ -> → ← .. … ちなみにUnicodeSyntaxに対応したソースコードをa2psで.psにしたら文字…

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 …

穴を開ける箇所

最初,穴を開ける箇所は「理解が困難な点」が良いと考えていた.穴を開ける箇所は「「重点的に空欄補充問題を解くことで理解しているか確認したり理解を強化したい箇所」である.しかし,@yfkkと議論していくうちに,「重点的に空欄補充問題を解くことで理解…

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) のように制約をつけて型宣言をすると,「この型の値を引数とする関数すべてがこの制約を満たさなければならない」と書いてある…