Haskell-基本的なデータモデル
Haskellは純粋に関数型プログラミング言語であるため、他のプログラミング言語よりもはるかにインタラクティブでインテリジェントです。この章では、Haskellの基本的なデータモデルについて学習します。これらのモデルは、実際に事前定義されているか、コンピューターのメモリにインテリジェントにデコードされています。
このチュートリアル全体を通して、当社のWebサイトで利用可能なHaskellオンラインプラットフォームを使用します(https://www.tutorialspoint.com/codingground.htm)。
数字
Haskellは、ある数を数としてデコードするのに十分インテリジェントです。したがって、他のプログラミング言語の場合に通常行うように、そのタイプを外部で言及する必要はありません。例のように、プレリュードコマンドプロンプトに移動し、「2 +2」を実行してEnterキーを押します。
sh-4.3$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> 2+2
結果として、次の出力が表示されます。
4
上記のコードでは、タイプを事前定義せずに2つの数値を引数としてGHCIコンパイラに渡しただけですが、コンパイラはこれら2つのエントリを数値として簡単にデコードできます。
ここで、もう少し複雑な数学的計算を試して、インテリジェントコンパイラが正しい出力を提供するかどうかを確認しましょう。「15+(5 * 5)-40」でお試しください
Prelude> 15+(5*5)-40
上記の式は、期待される出力に従って「0」を生成します。
0
キャラクター
数字のように、Haskellは入力として与えられた文字をインテリジェントに識別できます。Haskellコマンドプロンプトに移動し、二重引用符または一重引用符で任意の文字を入力します。
次の行を入力として提供し、その出力を確認しましょう。
Prelude> :t "a"
次の出力が生成されます-
"a" :: [Char]
使用することを忘れないでください(:t)入力を供給している間。上記の例では、(:t)入力に関連する特定のタイプを含めることです。このタイプについては、次の章で詳しく説明します。
次の例を見てください。ここでは、無効な入力をcharとして渡しており、エラーが発生しています。
Prelude> :t a
<interactive>:1:1: Not in scope: 'a'
Prelude> a
<interactive>:4:1: Not in scope: 'a'
エラーメッセージ「<interactive>:4:1:Not in scope: `a '」により、Haskellコンパイラは入力を認識できないことを警告しています。Haskellは、すべてが数字を使用して表される言語の一種です。
Haskellは従来のASCIIエンコーディングスタイルに従います。詳細を理解するために、次の例を見てみましょう。
Prelude> '\97'
'a'
Prelude> '\67'
'C'
入力がASCII形式にデコードされる方法を確認してください。
ストリング
A string文字の集まりに他なりません。文字列を使用するための特定の構文はありませんが、Haskellは二重引用符で文字列を表す従来のスタイルに従います。
文字列「Tutorialspoint.com」を渡す次の例を見てください。
Prelude> :t "tutorialspoint.com"
画面に次の出力が表示されます-
"tutorialspoint.com" :: [Char]
文字列全体がCharのみの配列としてどのようにデコードされたかを確認してください。他のデータ型とその構文に移りましょう。実際の練習を開始すると、すべてのデータ型とその使用法に慣れることになります。
ブール値
ブールデータ型も、他のデータ型と同様に非常に単純です。「True」や「False」などのブール入力を使用してさまざまなブール演算を使用する次の例を見てください。
Prelude> True && True
True
Prelude> True && False
False
Prelude> True || True
True
Prelude> True || False
True
上記の例では、「True」と「False」がブール値であることを言及する必要はありません。Haskell自体がそれをデコードしてそれぞれの操作を行うことができます。入力を「true」または「false」で変更してみましょう。
Prelude> true
次の出力が生成されます-
<interactive>:9:1: Not in scope: 'true'
上記の例では、Haskellは「true」と数値を区別できなかったため、入力「true」は数値ではありません。したがって、Haskellコンパイラは、入力がそのスコープではないことを示すエラーをスローします。
リストとリスト内包
他のデータ型と同様に、 ListHaskellで使用される非常に便利なデータ型でもあります。例のように、[a、b、c]は文字のリストであるため、定義上、Listはコンマで区切られた同じデータ型のコレクションです。
他のデータ型と同様に、リストをリストとして宣言する必要はありません。Haskellは、式で使用されている構文を調べることで入力をデコードするのに十分インテリジェントです。
Haskellがリストをどのように扱うかを示す次の例を見てください。
Prelude> [1,2,3,4,5]
次の出力が生成されます-
[1,2,3,4,5]
Haskellのリストは本質的に同種です。つまり、異なる種類のデータ型のリストを宣言することはできません。[1,2,3,4,5、a、b、c、d、e、f]のようなリストは、エラーを生成します。
Prelude> [1,2,3,4,5,a,b,c,d,e,f]
このコードは次のエラーを生成します-
<interactive>:17:12: Not in scope: 'a'
<interactive>:17:14: Not in scope: 'b'
<interactive>:17:16: Not in scope: 'c'
<interactive>:17:18: Not in scope: 'd'
<interactive>:17:20: Not in scope: 'e'
<interactive>:17:22: Not in scope: 'f'
リスト内包表記
リスト内包表記は、数式を使用してリストを生成するプロセスです。[output |の形式の数式を使用してリストを生成している次の例を見てください。範囲、条件]。
Prelude> [x*2| x<-[1..10]]
[2,4,6,8,10,12,14,16,18,20]
Prelude> [x*2| x<-[1..5]]
[2,4,6,8,10]
Prelude> [x| x<-[1..5]]
[1,2,3,4,5]
数式を使用して1つのリストを作成するこの方法は、次のように呼ばれます。 List Comprehension。
タプル
Haskellは、単一のデータ型で複数の値を宣言する別の方法を提供します。それはとして知られていますTuple。タプルはリストと見なすことができますが、タプルとリストの間には技術的な違いがいくつかあります。
実行時に要素の数を変更できないため、タプルは不変のデータ型ですが、リストは変更可能なデータ型です。
一方、Listは同種のデータ型ですが、タプルには異なるタイプのデータが含まれている可能性があるため、タプルは本質的に異種です。
タプルは単一の括弧で表されます。次の例を見て、Haskellがタプルをどのように扱うかを確認してください。
Prelude> (1,1,'a')
次の出力が生成されます-
(1,1,'a')
上記の例では、1つのタプルと2つのタプルを使用しました number 型変数、および char 型変数。