2010-04-01から1ヶ月間の記事一覧

無限リストを作成出来ない例(foldl)

http://en.wikibooks.org/wiki/Haskell/List_processing replicate は第 2 引数の値を要素とする長さ第 1 引数のリストを作る関数 ghci> replicate 3 "abc" ["abc","abc","abc"] echoesR は foldr を使用した要素の数を連続させる関数 ghci> echoesR = foldr…

Gauche でパターンマッチ

11.47 util.match - パターンマッチング Haskell でパターンマッチ分岐すると他の言語でもパターンマッチしたくなる。 (use util.match) (define (match-test ls) (match ls (((a b) c (d e)) (list "a:" a b c d e)) (((a b)) (list "b:" a b)) (((a b) c) …

fnc a b c = a + b + c と fnc = \a -> \b -> \c -> a + b + c は同等

Declaration vs. expression style 1.1 Declaration style filter1 :: (a -> Bool) -> [a] -> [a] filter1 p [] = [] filter1 p (x:xs) | p x = x : rest | otherwise = rest where rest = filter p xs 1.2 Expression style filter2 :: (a -> Bool) -> [a] …

let 式

プログラミング Haskell 第8章 関数型パーサーに使われている string 関数について訳者が解説していて、その中に let ... in ...という表現が出てきました。使ったことがないので調べてみました。 -- let sum2 :: (Num a) => [a] -> a sum2 xs = let sum' []…

「プログラミング Haskell」 読書メモ 第8章 関数型パーサー(1)

プログラミング Haskell 第8章 関数型パーサー 8.2 パーサーの型 import Char import Monad newtype Parser a = P (String -> [(a,String)]) instance Monad Parser where return v = P (\inp -> [(v,inp)]) p >>= f = P (\inp -> case parse p inp of [] ->…

Glade で作った GUI が動いた。

Glade Tutorialの例を動作させてみました。 以前うまく行かなかったのは Glade プロジェクトを開始するときに「GtkBuilder」にチェックしていたから。今回「Libglade」チェックしたところ正常に動作した。名前が「Libglade」なのだからもっと早く気付くべき…

Haskell で MS-Access、SQL server のテーブルを読む

接続文字列 # http://oshiete1.goo.ne.jp/qa5196452.html # SQL Serverの場合、一般的に使われているのが、 #・Microsoft OLE DB Provider for ODBC(MSDASQL) #・Microsoft OLE DB Provider for SQL Server(SQLOLEDB) 〜最も一般的 #・Microsoft SQL Server …

「プログラミング Haskell」 読書メモ 7.3 畳込関数

プログラミング Haskell 7章 高階関数 7.3 畳込関数 reverse を foldr で作る例が面白いので写経。 -- 普通の reverse の定義 reverse :: [a] -> [a] reverse [] = [] reverse (x:xs) = reverse xs ++ [x] reverse [1,2,3] を展開すると reverse 1:(2:(3:[])…

WIndows のタスクスケジュールはc:\windows\system32 で実行される。

WIndows のタスクスケジュールにはまりました。 定時に実行したいファイル c:\db\dbbackup.cmd を登録しても、「この操作が正しく終了しました」となるべき「前回の実行結果」が(0x2)になってしまうのです。c:\db\dbbackup.cmd sqlcmd -i c:\db\FullBackup.s…

「プログラミング Haskell」 読書メモ 6 再帰関数

プログラミング Haskell 6章 再帰関数 6.8 練習問題 -- マージソート merge :: (Ord a) => [a] -> [a] -> [a] merge [ ] ys = ys merge xs [ ] = xs merge (x : xs) (y : ys) | x <= y = x : merge xs (y : ys) | otherwise = y : merge (x : xs) ys halve :…

「プログラミング Haskell」 読書メモ 6.2リストに対する再帰

プログラミング Haskell 6章 再帰関数 6.2リストに対する再帰 小さい順に並んでいるリストを先頭より比較し、リストの要素の値が挿入しようとする値と同じか大きくなったところに挿入される。 -- 挿入ソート insert :: Ord a => a -> [a] -> [a] insert x []…

Haskellの正規表現によるマッチ判定・文字列の置換・文字列の分割

Text.Regex.Posix の (=~) 関数を使った置換 import Text.Regex.Posix replace str old new | match == "" = str | otherwise = headStr ++ new ++ replace tailStr old new where (headStr,match,tailStr) = str =~ old ::(String,String,String) import Te…

数字文字列にカンマを入れる

ワンライナーっぽく出来た。 Prelude> let addComma numStr = concat $ snd $ foldr (\x t ->(fst t + 1,(if fst t `mod` 3 == 0 && fst t /= 0 then (x++",") else x):snd t)) (0,[]) [[x]|x <-numStr] Prelude> addComma "1234" "1,234" Prelude> addComma…