2007-01-23から1日間の記事一覧

関数名、変数名。

関数名、変数名に使える文字は以下の通り。 アルファベット 数字 _(アンダースコア) '(シングルクォート) 1文字目はアルファベットの小文字か_でないといけないが、Haskellの仕様書では_を避けるとあるとのこと。 また'は補助的な関数の名前によく使われる。…

演算子を独自に定義。

main = do print $ (+*) 2 3 print $ 2 +* 3 (+*) :: Int -> Int -> Int (+*) x y = (x + y) + (x * y) 結果。 11 11

case式。

関数定義じゃなくても、パターンマッチ、ガードが使える。 main = putStr $ case "abc" of "" -> "" all@(c:cs) | all == "abc" -> "ABC" | otherwise -> all 結果。 ABC それにしても、何と意味のないサンプルだろうか。

ガード。

main = do print $ guardTest 1 print $ guardTest (-1) guardTest :: Int -> Int guardTest x | x < 0 = 0 | otherwise = x 結果。 1 0 から=までガード(guard) ガードはパターンマッチと同様に仮引数の値によって複数の関数を定義できる。 パターンマッチ…

@パターン(アズパターン)

as-pattern。 main = asTest [1, 2, 3] asTest all@(n:ns) = do {print $ all; print $ n; print $ ns} 結果。 [1,2,3] 1 [2,3] nが1、nsが[2,3]に、allは[1,2,3]、つまりリスト全体に束縛される。

インデントを使わずに書く。

main = do cs <- getContents putStr cs は main = do {cs <- getContents; putStr cs} このようにブロックを{}で囲み、式を;で区切って書くことができる。

パターンマッチいろいろ。

変数パターン _パターン(アンダーバー) リテラルパターン タプルパターン データコンストラクタパターン n + kパターン いろいろある。 この中でよくわからないのが_パターン、データコンストラクタパターン、n + kパターン。 n + kパターンは使用頻度が低く…