2016-08-11 10 views
1

ghciを使用しています。私は、リスト内のすべての要素を2倍にする単純な関数を持っています。私はそれが二重のリストの要素だが、最終的には以下のエラーで失敗するパターンマッチングを試みたとき:Haskellのパターンコードがエラーで失敗しています「関数内の非網羅的なパターン」

*Main> let double [] = [] 
*Main> let double (x:xs) = (2*x) : double xs 
*Main> double [10,2,0,5] 
[20,4,0,10*** Exception: <interactive>:52:5-37: Non-exhaustive patterns in function double 

私は警備員やパターンでの作業と同じ機能を得ました。パターンだけを使用するときに私が間違っていることを確認できません。お知らせ下さい。あなたの二let

*Main> let double (x:xs) | null xs = [2* x] | otherwise = (2*x) : (double xs) 
*Main> double [10,2,0,5] 
[20,4,0,10] 
+3

2番目の 'let'は最初の' 'let''を上書きします。 – ErikR

答えて

6

は新しいdoubleを定義しています。このようにGHCiで複数行関数を定義することができます。

λ :{ 
| let 
| double :: Num a => [a] -> [a] 
| double [] = [] 
| double (x:xs) = 2 * x : double xs 
| :} 
λ double [1,2,3] 
[2,4,6] 

ただし、これはmap (2*)と同等です。

関連する問題