2010-04-01から1ヶ月間の記事一覧
http://en.wikibooks.org/wiki/Haskell/List_processing replicate は第 2 引数の値を要素とする長さ第 1 引数のリストを作る関数 ghci> replicate 3 "abc" ["abc","abc","abc"] echoesR は foldr を使用した要素の数を連続させる関数 ghci> echoesR = foldr…
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) …
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] …
プログラミング Haskell 第8章 関数型パーサーに使われている string 関数について訳者が解説していて、その中に let ... in ...という表現が出てきました。使ったことがないので調べてみました。 -- let sum2 :: (Num a) => [a] -> a sum2 xs = let sum' []…
プログラミング 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 Tutorialの例を動作させてみました。 以前うまく行かなかったのは Glade プロジェクトを開始するときに「GtkBuilder」にチェックしていたから。今回「Libglade」チェックしたところ正常に動作した。名前が「Libglade」なのだからもっと早く気付くべき…
接続文字列 # 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章 高階関数 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:\db\dbbackup.cmd を登録しても、「この操作が正しく終了しました」となるべき「前回の実行結果」が(0x2)になってしまうのです。c:\db\dbbackup.cmd sqlcmd -i c:\db\FullBackup.s…
プログラミング 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章 再帰関数 6.2リストに対する再帰 小さい順に並んでいるリストを先頭より比較し、リストの要素の値が挿入しようとする値と同じか大きくなったところに挿入される。 -- 挿入ソート insert :: Ord a => a -> [a] -> [a] insert x []…
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…