2017-12-22 4 views
2

Ich bekomme folgenden Fehler für die unten, nehme ich alle rekursive Fälle, Was fehlt?Haskell nicht erschöpfende Muster fehlen

Prelude> product [] =1 
Prelude> product (x:xs) =x * product xs 
Prelude> product [1,2,3] 
*** Exception: <interactive>:48:1-30: Non-exhaustive patterns in function product 

Antwort

8

GHCi verarbeitet jede separat Linie, so haben Sie eine Funktion

product [] = 1 

definiert und dann product beschattete eine neue Funktion

durch die Definition
product (x:xs) = x * product xs 

Um dies zu beheben, können Sie :{ verwenden und :} für einen Mehrzeilenblock:

:{ 
product [] = 1 
product (x:xs) = x * product xs 
:} 

oder, und das ist, was ich empfehlen würde, legen Sie Ihre Funktionsdefinitionen in eine Datei und laden Sie sie in GHCi.

+3

oder Sie können es als eine Zeile schreiben: 'product [] = 1; Produkt (x: xs) = x * Produkt xs' –

2

Ich empfehle dringend, Warnungen mit -Wall einzuschalten. Dies würde hier auch darauf hinweisen, dass jede Definition separat betrachtet wird.

> :set -Wall 
> product [] = 1 

<interactive>:2:1: warning: [-Wincomplete-patterns] 
    Pattern match(es) are non-exhaustive 
    In an equation for ‘product’: Patterns not matched: (_:_) 
> product (x:xs) = x * product xs 

<interactive>:3:1: warning: [-Wincomplete-patterns] 
    Pattern match(es) are non-exhaustive 
    In an equation for ‘product’: Patterns not matched: [] 

Tatsächlich bemerken, wie die letzte Warnung Beschwerden über [] nicht abgestimmt ist, dass die erste Definition zeigt product [] ignoriert wurde.

Verwandte Themen