2015-11-16 8 views

答えて

17

リストは連想バイナリ操作++で、モノイド構造を形成し、中立要素[]。つまり、我々は

[] ++ xs = xs = xs ++ [] (xs ++ ys) ++ zs = xs ++ (ys ++ zs) 

はまた、数字はモノイド構造の多くを持っていましたが、ここでは関係1は、操作が*で、中立要素が1あるところということです。

1 * x = x = x * 1   (x * y) * z = x * (y * z) 

product関数は、数値の数字のリストからマップだけではない:それは、数値モノイドでリストモノイド構造を反映し、モノイド準同型です。決定的に、

product (xs ++ ys) = product xs * product ys 

product [] = 1 

実際には、元を取得するために、我々はかなり後者は、私たちに強制しています。

2

製品はそれだけのinit値を返し、空のリストを折るときに、ウィッヒはそれをilustrateする製品実装の1

例である1の初期値を持つ倍であります正しく理解するにはfoldをご覧ください。

7

それは数学のことだ - これは、たとえばうまく

いつもの法律に適合しますので、あなたは、通常01なるように空の製品であることをあなたが製品の誘導定義を正当化することができ、このように空の合計を定義します - see Wikipedia

7

これは、乗算のカテゴリのアイデンティティです。

より実用的には:

今度はあなたが簡単な再帰でそれを実装することができます
product [1,2,3] == product [1] * product 2:3:[] 
       == product [1] * product [2] * product 3:[] 
       == product [1] * product [2] * product [3] * product [] 

product [] = 1 
product (x:xs) = x * product xs 
+2

あなたは、ハスケルであなたの数学の帽子をかぶっていることがしばしば有益だと分かります。 –

関連する問題