0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Haskell初心者は絶対に意識したい【文字列とリスト】 ( ' ) と ( " ) の違い

Posted at

Haskellの基本の基本 注意したいところ

Haskell における文字列の正体はリストです。
この事実に注意すると、一重引用符と二重引用符の違いというテーマがとても重要です。
しかし、Haskell初心者にとってはこの重要性を実感できず、あまり注目できない可能性があります。

この記事では、

  • 一重引用符と二重引用符の違い
  • コンス(: 演算子)
  • 文字 (Char)と文字列 (String)
  • 糖衣構文(シンタックスシュガー)

という観点から、Haskell の文字列とリストについて初心者向けに解説します。


1. 一重引用符 (') と二重引用符 (") の違い

Haskell では、 一重引用符 (') は Char を表し、二重引用符 (") は String を表します。

例:

c :: Char
c = 'a'  -- 一重引用符で囲まれた単一の文字

s :: String
s = "hello"  -- 二重引用符で囲まれた文字列(リスト型)

ポイント:

  • 'a'Char(単一の文字)
  • "hello"String[Char]、つまり Char のリスト)

文字列は [Char](文字のリスト) であるため、リストとしての操作が可能です。

head "hello"   -- 'h'
tail "hello"   -- "ello"

2. コンス : 演算子

Haskell では、リストの 先頭に要素を追加する演算子として :(コンス)を使用 します。これは、文字列([Char])にも適用できます。

例:

s1 = 'h' : "ello"  -- "hello"
s2 = 'H' : "askell"  -- "Haskell"

リストとしての解釈:

'h' : ('e' : ('l' : ('l' : ('o' : []))))  -- "hello"

つまり、

  • :リストの先頭に要素を追加する演算子
  • "hello" は実際には 'h' : 'e' : 'l' : 'l' : 'o' : [] というリスト構造

3. Char(文字)と String(文字列)

Char単一の文字 を表し、StringChar のリスト([Char] です。

c :: Char
c = 'A'  -- 単一の文字

s :: String
s = "Hello"  -- 文字のリスト

文字と文字列の区別に注意!

notChar = "A"  -- エラー! `"A"` は `Char` ではなく `String`
  • "A"String[Char])なので、Char 型の変数には代入できません。
  • String は実際には ['A'] という リスト です。

リスト操作の適用例

length "Haskell"  -- 7  (リストの要素数を取得)
reverse "abc"  -- "cba"  (リストの逆順)
"Hello" ++ " World"  -- "Hello World"  (リストの結合)

4. 糖衣構文(シンタックスシュガー)

Haskell では、String に対して便利な書き方(糖衣構文)が提供されています。

String のリスト表現

実際には、"hello" は以下のようにリストとして表現されます。

"hello" == ['h', 'e', 'l', 'l', 'o']

このように、StringChar のリスト [Char] の糖衣構文(簡略記法)です。

リスト内包表記と String

Haskell ではリスト内包表記を使って、文字列を生成できます。

alphabet = [c | c <- ['a'..'z']]  -- "abcdefghijklmnopqrstuvwxyz"

これは ['a'..'z'] をそのまま String として扱う例です。


5. まとめ

観点 説明
一重引用符 (') Char(単一の文字)を表す 'a'
二重引用符 (") String(文字のリスト [Char])を表す "hello"
コンス (:) 演算子 CharString に追加できる 'H' : "askell""Haskell"
CharString の違い Char は単一の文字、String[Char] 'A'"A"['A'])は異なる
糖衣構文 "hello"[Char] の省略形 "hello" == ['h','e','l','l','o']

Haskell では 文字列はリストである という点を理解すると、リスト操作をそのまま String に適用できるようになります。

関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?