2016-04-21 10 views
-1

ich ein kleines Problem habe, bin ich sehr neu in Haskell, und ich verstehe nicht, warum die Liste nach dem Anfügen 20.Haskell, Liste speichert keine Variablen?

*Main> list 
[] 
*Main> add_element 
[20] 
*Main> list 
[] 
*Main> 

meinen Code leer ist:

list = [] 

add_element = list++[20] 
+5

In Haskell ist alles unveränderlich. 'add_element' gibt am Ende eine _new_ Liste mit' 20' zurück. Die Liste kann und kann nicht geändert werden. – chi

+2

Siehe auch meine Antwort auf [GHCI Haskell erinnert sich nicht an Bindungen in der Befehlszeile] (http://stackoverflow.com/q/35304656/237428). –

Antwort

8

In Haskell Variablen sind unveränderlich. In Ihrem Fall:

list = [] 

Sie haben eine leere Liste definiert.

add_element = list ++ [20] 

add_element Das Symbol ist keine Funktion, die list mutiert. Es ist tatsächlich eine neue Liste, die durch Kombinieren der leeren Liste (list) mit der Singleton-Liste [20] erstellt wurde.

Die Definition der obersten Ebene list wird nie etwas anderes als [] sein.

4

Werte in Haskell sind unveränderlich. Ihr Code definiert einfach einen leeren Listenwert für list, der wird nie ändern.

add_element ist ein Wert, der list mit dem Ganzzahlwert 20 am Ende angehängt darstellt. Es hat nicht kann nicht den Wert list ändern.

Werfen Sie einen Blick auf einige intro Haskell guides, um ein Gefühl dafür zu bekommen, was Unveränderlichkeit bedeutet.

+3

Ich würde argumentieren, eine Funktion ist ein Wert mit einem Pfeil Typ 'a -> b'. Nach dieser Definition ist "add_element" keine Funktion. –

+0

Danke für das Hinzufügen des Links zum Tutorial! –

+2

Es gibt keine "Funktion mit Arity Null" in Haskell, und "Wert" und "Funktion" schließen sich nicht gegenseitig aus: lambdas * sind * Werte, zum Beispiel. Siehe auch: ["Alles ist eine Funktion" in Haskell?] (Http://conal.net/blog/posts/everything-is-a-funktion-in-haskell) (Spoiler: nein). –