一汁三菜

自分が楽しいと思うこと、マラソン、旅行、その他日々の記録をしたい。

第6章 基本的な値

この辺りから暗記するだけの章が続くので、だるくなってくる。

Bool

TrueとFalseを値に取る型。論理演算はnot, (&&), (||)。

数値

Rubyとの対応で言うと、IntがFixnumでIntegerがBignum。但し、Rubyとは違い暗黙の内にIntとIntegerの間で変換が行われる訳ではない。文脈によって分かる所ではどちらの型にすべきか適宜決められる。
Pascalの様に、整除では"/"を使わずにdiv(-∞方向へまるめる), quot(ゼロ方向にまるめる)を用いる。それぞれの剰余はmod, remを使う。この辺りは覚えられなさそう。
Floatが単精度浮動小数点数、Doubleが倍精度浮動小数点数であるというのは、お約束。

文字(列)

文字リテラルはsingle quote。文字列はdouble quote。
文字型はCharで、文字列型はString(=[Char])。
Charモジュールには、Char型の値を扱う関数が豊富に取り揃えられている。C言語のctype的な物から、文字コードを得るordとその逆関数のchrまである。

タプル

空のタプル()をユニットという。タプルは2つ以上の値を組にした物。3つ以上でも作れるが、1つだけではダメ。タプル中に現れる型はタプルの要素間で違っていてもいい。
タプルを扱う関数がいくつか導入された。

fst
タプルの最初の要素を取り出す
snd
タプルの2番目の要素を取り出す
zip
[a]と[b]から[(a,b)]を生成
unzip
[(a,b)]から([a],[b])を生成

リスト

おなじみのリスト。x:xsは、xsの先頭にxを追加したリストを返す演算子。右結合なので、1:2:[3, 4]は[1, 2, 3, 4]となる。
[1..5]とすると、[1, 2, 3, 4, 5]としたのと同じ。このような略記法はいくつもある。例えば[1, 3..] = [1, 3, 5, 7, ...]となる。
[1..]のようなリストを無限リストといい、無限長のリストとして扱う事ができる。
リスト関連の関数が2つ登場。

null
リストが空ならTrue, そうでなければFalseを返す関数
(++)
2つのリストを連結したリストを返す関数

[abs | x <- xs]とすると、数学の書き方でリストを作成できる。これをリスト内包表記という。

練習問題

resolve f (x:xs) = (textify x) ++ (resolve f xs)
getenv key env = fromMaybe "" $ (lookup key env)
readTemplate id = readFile $ ((prefix repo) ++ "/" ++ id)