Haskell勉強中

「Learn You a Haskell for Great Good!」という本の一部を翻訳します。


タイプのコンストラクタと値のコンストラクタを区別することが重要です。
データタイプを宣言したとき、「=」より左側は、タイプのコンストラクタです。
右側は、値のコンストラクタです。


次のような記述で考えると、


data Test a = Test a a [Char]

mySum :: (Num a ) => Test a -> a
mySum (Test x y _) = x + y


まず、Test a というタイプコンストラクタを宣言しています。
このaには、Intなどのタイプがきます。

つぎに、Test a a [Char]が、データのコンストラクタで、aがIntの場合、
Test Int Int [Char]と等価です。

関数mySumの定義をみると、ここは、宣言したデータ型 Test aを引数にとり、aを返す、となります。
具体例では、Test Int -> Int です。

関数の実装は、Test a型の値を受け取り、演算しています。

それぞれ、型を記述しているのか、値を記述しているのか、考える必要があるのです。

(実施結果)

*Main> mySum (Test 1.0 2.0 "abc")
3.0


数というのは1,2,3・・・というやつです。

最近、数学の本をいろいろ読んでるんですが、自然数(1,2,3・・・)は、
素数の掛け算で表されるとのこと。

素数とは、1とその数自身意外に、約数(割り切れる数)を持たない数のことです。
(例外的に、1は素数ではありません)

素数でない自然数を合成数といいます。

2・・・素数
3・・・素数
4・・・合成数(2×2)
5・・・素数
6・・・合成数(2×3)
7・・・素数
8・・・合成数(2×2×2)

という感じです。

素数は無限にあります。

その証明の一つは、素数の数が有限個だとして、有限個の素数を全てかけて1足した数を考えます。

有限個ということで、最大の素数が7だとします。
2×3×5×7 + 1 = 210 + 1 = 211

この211という数は、既知の素数(2,3,5,7)のいずれで割っても1あまります。
つまり、この数は新しい素数です。

これを連続していけば、いくらでも素数が増やせるわけです。つまり無限です。

という初めてのエントリーでした。