2011-01-31 12 views
9

Öğrenme amaçları için kendi uyguladığım zipWith işlevini yazmaya çalışıyorum. Bununla birlikte, kenar kasalarda _ ile desen eşleşmesiyle ilgili bir sorun yaşıyorum. Önce iyi vakayı, sonra da kötü durumu anlatacağım. Umarım birileri neden farklı davrandığını açıklayabilecektir.Joker karakterle eşleşen desenle ilgili birden fazla hata '

zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c] 
zipwith' _ [] _ = [] 
zipWith' _ _ [] = [] 
zipWith' f (x:xs) (y:ys) = f x y : zipWith' f xs ys 

GHCi içinde Derleme: - -:

şöyle ben zipWith fonksiyonu yazarsanız, o inşaat Teşekkür

(hatlar 2 boş liste & 3 eşleşen uç örnekleri sırasını Not)

ghci> :l ZipWith.hs 
[1 of 1] Compiling Main    (ZipWith.hs, interpreted) 

Tamam yukarıda gayet, henüz takas halinde GHCi çevresinde kenar durumlar için eş düzende hatlar 2 ve 4

için hata 'Çoklu bildirimleri' atar 10
zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c] 
zipWith' _ _ [] = [] 
zipwith' _ [] _ = [] 
zipWith' f (x:xs) (y:ys) = f x y : zipWith' f xs ys 

GHCi içinde Derleme: -

ZipWith.hs:4:0: 
    Multiple declarations of `Main.zipWith'' 
    Declared at: ZipWith.hs:2:0 
       ZipWith.hs:4:0 
Failed, modules loaded: none. 

stumped ... hatları 2. ve 4. tarzlarına bakıldığında

  1. onlar birbirini dışlayan görünüyor ama belli ki bir şey eksik Burada temel neden 2 ve 3 numaralı satırlardaki kalıpları değiştirmek derleme hatasının kaybolmasına neden olur.

cevap

15

hata mesajı desenleri örtüşen şikayetçi değildir (senin desenler iki boş listelerin durumunda örtüştüğü, ama bu sorun, ne de bir sorun ikisi de değil), fakat zipWith fonksiyonun birden tanımlar.

Bunun nedeni ikinci durumda zipwith bir ilişkisiz tanım ardından zipWith biri tanımını olması zipWith yeni, çakışan tanımı gereği, ardından (küçük harf w dikkat edin). Diğer bir deyişle, basit bir yazım hatasıdır. (Beni görmek için biraz zaman ayırın - oldukça sinsi bir yazım hatası)

+2

Oh, bu yazım hatası benim için çok utandırıcıdır, onu gördüğünüz için teşekkürler ve yanlış yorumumu açıklamamı açıklıyor. Hem Q hem de A için – Jabbslad

+4

+1. Birisi kesinlikle Google’ı bu şekilde görecek ve bu cevabı görmek istiyor. –

+1

Hata mesajına "muhtemelen yazım hatası" gibi bir şey eklemeliler. – fuz

İlgili konular