2012-07-17 23 views
6

Ich bin ein großer Neuling zu Haskell, ich habe gerade erst vor 10 Minuten gestartet. Ich versuche herauszufinden, wie man eine Variable innerhalb einer Funktion definiert. Lets sagen, dass ich die FunktionDefinieren von Variablen innerhalb einer Funktion Haskell

foo :: Int -> Int 
foo a = 
    b = a * 2 
    b 
-- Yes, I know, it doesn't do anything interesting 

haben, wenn ich es in GHCi laufen bekomme ich einen Syntaxfehler! Wie können Sie eine Variable in einer Funktion definieren?

+1

In Verbindung stehende: http://Stackoverflow.com/q/993124 –

+0

Lassen Sie b = a * 2 in b –

+12

Lesen Sie [Lernen Sie ein Haskell] (http://learnyouahaskell.com). –

Antwort

1

Abgesehen von der technischen Korrektheit lautet die Antwort "sort of".

Ich denke, es ist besser, sich eine Variable als eine Funktion von Nullargumenten vorzustellen, die auf einen gegebenen Wert auswertet.

module Main where 
import System.IO 

foo :: Integer -> Integer 
foo a = 
    b where 
    b = a * 2 

main = do 
    putStrLn $ show $ foo 10 
+11

Es ist keine Funktion von Nullargumenten. Jede Funktion in Haskell nimmt genau ein Argument. –

+2

Weitere Informationen zu Magnus finden Sie in Conal Elliotts Blogpost ["Alles ist eine Funktion" in Haskell?] (Http://conal.net/blog/posts/everything-is-a-function-in-haskell). –

+0

@MagnusKronqvist: Würde es Ihnen etwas ausmachen, ein Dokument zur Verfügung zu stellen, das die Dokumentation dafür liefert? –

19

Es gibt zwei Möglichkeiten, dies zu tun:

foo a = b where b = a * 2 
foo a = let b = a * 2 in b 

In den meisten Fällen zwischen ihnen die Wahl ist eine ästhetische eher als technische. Genauer gesagt kann where nur an Definitionen angehängt werden, während let ... in ... überall dort verwendet werden kann, wo ein Ausdruck erlaubt ist. Sowohl where als auch let führen Blöcke ein, wodurch mehrere interne Variablen in beiden Fällen praktisch sind.

+0

Hey ich frage mich, wie Sie mehrere Hilfsvariablen innerhalb einer Funktion definieren würden, würden Sie etwas tun wie 'wo b = a * 2, c = a * 3' oder würden Sie eine völlig andere" where "Anweisung verwenden? –

+0

@EbenCowley Eine einzige 'where' /' let' wird tun. Verwenden Sie ';', um Deklarationen in derselben Zeile zu trennen, oder lesen Sie die Einrückungsregeln, um mehrere Zeilen zu verwenden. (Dies ist die Bedeutung des letzten Satzes meines Beitrags.) –

Verwandte Themen