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

数字または文字列を返す。

条件によって数字を返したり、文字列を返したりする if 文。(Ruby の例) $ irb irb(main):004:0> cnd=true => true irb(main):005:0> if cnd then 1 else "NG" end => 1 irb(main):006:0> cnd=false => false irb(main):007:0> if cnd then 1 else "NG" end …

データ型を定義してみる

data Sex = Male | Female deriving (Eq, Read, Show) data Person = P { name :: String, sex :: Sex , address :: String , age :: Int} deriving (Eq,Read,Show) p :: Person p = P { name ="taro", sex = Male , address = "Chiba", age =20} p2 :: Pers…

escapeHTML

escapeHTML を作ってみた。 Prelude> :set editor vi Prelude> :edit esc.hs Prelude> :load esc.hs [1 of 1] Compiling Main ( esc.hs, interpreted ) Ok, modules loaded: Main. Main> :!cat esc.hs escapeHTML :: String -> String escapeHTML cs = conca…

Int と Integer

Int はオーバーフローを起こす。 Prelude> :set +t Prelude> (2 :: Int) ^ (32 :: Int) 0 it :: Int Prelude> (2 :: Int) ^ (31 :: Int) -2147483648 it :: IntInteger はオーバーフローを起こさない。 Prelude> (2 :: Integer) ^ (31 :: Integer) 214748364…

Haskell で PosygreSQL(3)

オライリーから発売されるReal World Haskellを日本語に訳すページ 21. データベース操作 -- ghc --make -o sel -LC:\PostgreSQL\8.4\lib select.hs import IO import Database.HDBC import Database.HDBC.PostgreSQL main = do conn <- connectPostgreSQL "…

lookup 関数は Maybe モナドを返す

lookup 関数は Maybe モナドを返す Prelude> :t lookup lookup :: (Eq a) => a -> [(a, b)] -> Maybe b Prelude> let taro = ("taro",[("sex","male"),("address","chiba")]) Prelude> let jiro = ("jiro",[("sex","male"),("address","tokyo")]) Prelude> l…

GHCiで複数行の関数を定義

GHCiでパターンマッチのような複数行の関数を定義しようとすると後で定義した行のみが有効になってしまう。 Prelude> let fact 0 = 1 Prelude> let fact n = n * fact (n-1) Prelude> fact 10 *** Exception: stack overflow Prelude> :t fact fact :: (Num …

Haskell の正規表現すげー !!

効率的なファイル操作、正規表現、ファイル名マッチング(2012/02/18 リンク切れ) 翻訳していただきありがとうございます。(=~) の型はすごいことになっている。target を指定してtarget型の値を返す。 Prelude> :module +Text.Regex.Posix Prelude Text.Rege…

GHC でアセンブラ出力 "ghc -S hello.hs"

$ cat hello.hs main = putStrLn "Hello,world!" $ ghc hello.hs -o hello $ ./hello Hello,world! $ ghc -S hello.hs $ ls hello.* hello.hi hello.hs hello.o hello.s $ cat hello.s .section .data .align 4 siC_srt: .long base_GHCziBase_unpackCString…

Haskell でワンライナー

栄光のグラスゴーHaskellコンパイルシステム利用の手引き バージョン6.10.2 5.4.2. 式評価モード ~$ ghc -e 'putStrLn "Hello,world!"' Hello,world! ~$ ghc -e 'print $ map (+1) [ 1,2,3 ] ' [ 2,3,4 ] ~$ ghc -e 'print $ map (*2) [ 1,2,3 ] ' [ 2,4,6 ]…

map を自分で定義

もうひとつの Scheme 入門 8. 高階関数 練習問題 6 2. map を自分で定義してみてください。この問題は以前できなかったんだけれども、思い出してやってみると、すごくダサイけれどそれなりに動くのが出来た。 (use srfi-1) (define (mymap f . ls) (if (null…

concatMap

「ふつうのHaskellプログラミング」P71 ●concatMap は concat と map をくっつけたもの。 Prelude> :t concat concat :: [ [ a ] ] -> [a] Prelude> concat [ [1,2,3],[4,5,6 ] ] [1,2,3,4,5,6] Prelude> concat [ [ 'a','b','c' ], [ 'd','e','f' ] ] "abcd…

Ubuntu に入ってるPostgreSQL のデフォルトポートは5433

/etc/postgresql/8.3/main/postgresql.conf (snip) #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #-----------------------------------------------------------------------------…

Haskell で PosygreSQL(2)

読み込んでみる。 $ cat dbread.hs import IO import Database.HDBC import Database.HDBC.PostgreSQL main = do conn <- connectPostgreSQL "host=localhost port=5432 dbname=test" q <- quickQuery' conn "SELECT * from test" [] print q disconnect con…

Haskell で PosygreSQL

Real World Haskell で Haskellのお勉強です。 import IO import Database.HDBC import Database.HDBC.PostgreSQL main = do conn <- connectPostgreSQL "host=localhost port=5432 dbname=test" run conn "CREATE TABLE test (id INTEGER NOT NULL, name VA…