基本的な値
6.2 真偽値
Bool型はとても分かりやすい。
C言語のように0が偽で0以外が真というややこしいものではなくて、TrueとFalseしかないところがすっきりしてる。
こうあるべきですよね。関数not,(&&),(||)も馴染みのある感じですね。
6.3 数値
型の明示的宣言について
なるほどぉ、123はIntにも、Integer型にも、Float型にも、Double型にもなるんですね。
そのため、型を明示的に示したいときは、
15 :: Double
などと書く。この辺りはC言語と似てる。C言語ではもうちょっと機械的に
15f // float 12ul // unsigned long
などサフィックスで書きます。
省略するとdouble型や、signed intになっちゃうとか面倒くさいところはありますが。
…ちょっと疑問が。じゃぁ、こんな感じにもかけるのかな?と思い試してみました。
Prelude> 1.5 :: Int <interactive>:1:0: No instance for (Fractional Int) arising from the literal `1.5' at <interactive>:1:0-2 Possible fix: add an instance declaration for (Fractional Int) In the expression: 1.5 :: Int In the definition of `it': it = 1.5 :: Int Prelude>
どうも1.5 :: Intはダメみたい。
1.5はFloatやDouble、Fractionalにはなるけど、Intにはならないようだ。
キャストではないんですね。
6.4 文字と文字列
特に難しいと思うことはありませんでした。すんなり理解出来ました。
toLower関数を文字列に適用するときはこんな感じですね。
Prelude Char> map toLower "ABCDEFG" "abcdefg" Prelude Char>
なるほど、なるほど。
こうやってみるとmap関数ってHaskellの関数の中でもとても重要な部類に入る関数なのかなぁ、と思います。
リストの要素一つ一つに対して何か処理する、っていうのはよくあることですから。
6.5 タプル
ユニットについて
これまで何度か出てきた記述はユニットの()だったのかぁ。たとえば、
Prelude> :i putStr putStr :: String -> IO () -- Defined in System.IO
というように、ここでの()は値を返さないの意味だったんですね。
putStrはIO処理(アクション)を返すけど、そのIO処理(アクション)は値を返さないわけですね。
タプル操作関数
この本では4つの関数が紹介されていました。
unzipが若干見失いそうになりますが、理解出来ました。