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

class を作ってみる。

ジェネリックな関数を定義してみます。 data Person = Japanese String | English String String sayHello :: Person -> String sayHello (English a b) = a++","++b++"!!" sayHello (Japanese a) = a++","++a++","++a ghci> sayHello (Japanese "hello") --…

Maybe 型 と Either 型

関数が値を返さないかもしれないときには Maybe型を使います。 tList =[("Perl","Larry Wall"),("Ruby","Matz"),("C","Dennis Ritchie"), ("Fortran"," John Warner Backus")] mLookup :: String -> [(String,String)] -> Maybe String mLookup string ((key…

Haskell における数値間の変換(Int・Integer・Float・Double・Rational )

Haskell は数値の型を合わせないと計算出来ません。それは他の言語も同じですが、 Haskell には型推論があるため、変換しようとする型を直接指定するのでなく、中間としてジェネリックな型を指定して、あとは Haskell におまかせするというようなイメージで…

コンビネータ

Haskell では引数として別の関数を取り、新しい関数を返す関数のことをコンビネータと言います。(Real World Haskell p231 ) -- 引数を倍にして返す関数 ghci> let twice=(*2) ghci> twice 123 -- => 246 -- 引数を3倍にして返す関数 ghci> let thrice = (*…

Haskell から wxWidgets の wxDateTime を使う

Haskell から wxWidgets の COM を使う場合、データは wxVaritant 型でやりとりします。 wxVaritant はあらゆる型のデータを格納可能で wxDateTime もそのひとつです。 分かりにくいのですが、やりたいことは Haskellで VB のように Excel を読み書きしたり…

(++) によるリスト連結時の再帰回数を数えてみる(右結合である理由)。

(Real World Haskell—実戦で学ぶ関数型言語プログラミング 13.6 データとしての関数を利用する) Haskell においてリストを連結するための関数 ++ は下に示すように定義されています。xs ++ ys とした場合はリスト xs の長さに比例して再帰する回数が増加しま…

Haskell から wxWidgets(C++) 経由で Excel を操作する。

このプログラムは"日本語.xls"のファイルを読み書きするものです。 文字列は newCWString でワイド文字列に変換します。 さらに C++ で wxString に変換しています。 今回サポートしているVariant型は文字列、LongのVariant型です。 {-# LANGUAGE ForeignFun…