Haskell-basic-data-models

提供:Dev Guides
移動先:案内検索

Haskell-基本的なデータモデル

Haskellは純粋に機能的なプログラミング言語であるため、他のプログラミング言語よりもはるかにインタラクティブでインテリジェントです。 この章では、実際に事前定義されているか、何らかの形でインテリジェントにコンピューターのメモリにデコードされているHaskellの基本データモデルについて学びます。

このチュートリアルでは、Webサイト(https://www.finddevguides.com/codingground)から入手できるHaskellオンラインプラットフォームを使用します。

番号

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形式にデコードされるかを確認してください。

ひも

*string* は文字のコレクションにすぎません。 文字列を使用するための特定の構文はありませんが、Haskellは、二重引用符で文字列を表す従来のスタイルに従います。

文字列「finddevguides.com」を渡す次の例を見てください。

Prelude> :t "finddevguides.com"

画面に次の出力が生成されます-

"finddevguides.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コンパイラは、入力がスコープではないことを示すエラーをスローします。

リストとリストの理解

他のデータ型と同様、 List もHaskellで使用される非常に便利なデータ型です。 例として、[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つのリストを作成するこの方法は、*リスト内包*と呼ばれます。

タプル

Haskellは、単一のデータ型で複数の値を宣言する別の方法を提供します。 Tuple として知られています。 タプルはリストと見なすことができますが、タプルとリストの間にはいくつかの技術的な違いがあります。

リストは変更可能なデータ型ですが、実行時に要素の数を変更できないため、タプルは不変のデータ型です。

一方、リストは同種のデータ型ですが、タプルには異種のデータが含まれている可能性があるため、タプルは本質的に異種です。

タプルは単一の括弧で表されます。 次の例を見て、Haskellがタプルをどのように扱うかを確認してください。

Prelude> (1,1,'a')

それは次の出力を生成します-

(1,1,'a')

上記の例では、2つの number 型変数と1つの char 型変数を持つ1つのTupleを使用しました。