2009-11-08 7 views
41

私はA Gentle Introduction to Haskell(それほど穏やかではありません)を読んでおり、それが何をしているのかを直接説明することなく、:オペレータを繰り返し使用しています。:inix演算子はHaskellで何をしますか?

それでは、正確にはどうしますか?

x : xs 

は、最初の要素としてxを有するリストを返し、xsのすべての要素が続く:

+19

これはまったく穏やかではありません。これが関数型プログラミングとの最初の連絡であれば、私はこのサイトを推奨します:http://learnyouahaskell.com/ このサイトを読んだ後、A Gentle Introductionに戻ります。それは本当に多くの方法をスムーズにします。 –

答えて

65

:は「プリペンド」演算子です。それ「短所」は空のリストから繰り返し適用することにより、再帰的にリストをtructsので、他の関数型言語では、これは通常、consと呼ばれる:

1 : 2 : 3 : 4 : [] 

はリスト[1, 2, 3, 4]です。

+0

これはリストを連結する '++'演算子とどう違うのですか? – dlkulp

+2

@dlkulp '++'はあるリストを別のリストに連結します。 ':'では最初の引数は 'a'(任意の型)で、2番目の引数は' a 'の要素のリストの型である '[a]'型です。 –

21

GHCi/HUGSのタイプをチェックすることができます。チュートリアルの最初のステップでGHC/HUGSをダウンロードしてください。

Prelude> :t (:) 
(:) :: a -> [a] -> [a] 
Prelude> :t (++) 
(++) :: [a] -> [a] -> [a] 

それぞれのタイプから、その使用法を推測するのは簡単です。

PS:http://haskell.org/hoogle/は素晴らしいです。

+1

あなたはまったく正しいです。 +1 – moo

+1

なぜあなたに感謝!あなたがgogleをダウンロードした場合、それをghc内の関数として使うことができます。それはかなり甘いです。インポートすることなくタイプまたはファンクション名で検索することができます。すべての点でビート: – codebliss

+0

技術的に:)はx(:) xs = xsまたはx(:) xs = xs ++ [x] – alternative

9

リストの型コンストラクタです。 JustまたはLeftのような他の型のコンストラクタと違いはありませんが、それは中置です。有効な型コンストラクタは、大文字で始まる単語、またはコロンで始まる記号のいずれかです。

したがって、自分のデータ型にインフィックスコンストラクタを定義することができます。

data MyList a = a :> MyList a 
       | Empty 

我々は2つのコンストラクタとMyListと呼ばれるタイプを定義する上記のコードで:たとえば最初の要素と別のMyList aかかり奇妙に見えるコンストラクタ:>あります。 2番目は空のコンストラクタEmptyで、これはHaskellのネイティブリストの[]に相当します。

data MyList a = Cons a (MyList a) 
       | Empty 
12

:Haskellでは、オペレータがリストのコンストラクタである

上記と同等です。それは後に指定されたリストにコロンの前にあるものはすべて「賛成」します。

たとえば、整数のリストは空のリストにそれぞれの数字を「consing」することによって作られます。g;

次のようにリスト[1,2,3,4] を構築することができる。

  • 4 : [](空リストにコンス4)
  • 3 : [4](4を含むリストにコンス3)
  • 2 : [3,4](コンス2へ3,3,4を含むリスト)
  • 1 : [2,3,4](2,3,4を含むリストに合意1)

[1,2,3,4] 

完全に書かれています。

1 : 2 : 3 : 4 : [] 
関連する問題