2013-05-22 7 views
7

Wenn ich mich richtig erinnere von der Schule, gibt es eine Funktion oder ein Schlüsselwort, das für "noch nicht implementiert" verwendet wird, aber der Code kompiliert. Ich habe versucht, danach zu suchen, kann aber nicht finden. Weiß jemand, wonach ich suche?"Keine Operation" haskell

ist das so etwas wie

isDivisor :: Integer -> Integer -> Bool 
isDivisor x y = None 
--isDivisor x y = (rem x y) == 0 
+1

Verwenden Sie 'undefined'. Wenn Sie die Funktion aufrufen, erhalten Sie '*** Exception: Prelude.undefined'. –

+1

Alternativ ist 'isDivisor x y = Fehler" Noch nicht implementiert "', oder, wenn ghci eine Schleife haben soll, ist 'isDivisor x y = isDivisor x y'. –

Antwort

8

Was denken Sie von nicht implementiert ist es genannt wird, etwas bottom

Boden ist nicht nur für die Ansicht, bedeutete eine Berechnung darstellen, die unser Programm verursacht Versagen.

Denn wir beispielsweise tatsächlich undefined uns als Endlosschleife

undefined = let x = x in x 
undefined = undefined 

wirklich So definieren können, was wir tun undefined :: a in einem Wert zu setzen ist einfach, die für immer abstürzen oder Schleife verursachen oder das Programm, aber nie es bewerten.

Deshalb, wenn Sie einige große und komplexe Funktion, die Sie wissen nicht, wie Sie ihn nur Seit dieser typechecks

foo :: Bar -> Baz -> Quux 
foo bar baz = foo bar baz 

implementieren könnte das tun, werden sie zusammenstellen und wir können andere Teile testen unserer Programm.

Da es jedoch ziemlich unpraktisch ist, eine Endlosschleife zu haben, wenn Sie versehentlich diesen Teil des Programms ausführen, implementieren GHC und andere als ein anderes. Sie haben sie das Programm zum Absturz bringen und eine Fehlermeldung abgeben, zB:

-- In GHC 
error msg = throw (ErrorCall s) 
undefined = error "Prelude.undefined" 

So eine Funktion zu verlassen undefined mit besseren Debugging-Funktionen

foo bar baz = undefined 
foo bar baz = error ("Tried to evaluate foo with" ++ show bar ++ show baz) 

Wenn Sie das Konzept der Unterseite verwirrend sind zu finden, Hammar posted a great answer

Verwandte Themen