2009-02-11 7 views
9

habe ich diesen Code in Erlang:Erlang, Liste Verständnis Syntax

[X-$0 || X<-someFun()] 

In dieser Linie fand ich die -$0 Syntax sehr nützlich.

Ich habe den Code gelesen und geschätzt, was es bedeutet, aber ich bin mir nicht ganz sicher: ist es alle Zahlen geteilt?

Ich möchte die Erklärung oder man-Seite dieser Syntax sehen, aber ich kann es nicht finden. Kann mir jemand die richtige Seite zeigen?

Antwort

17

Was dieser Code tut, nimmt die Ausgabe von someFun() (die eine Liste zurückgeben muss), und für jedes Element in der Liste wird der Wert des Elements der Variablen X zugewiesen und dann wird der ASCII-Wert des Zeichens subtrahiert 0 von diesem Wert. Die resultierende Liste ist dann der Wert des gesamten Ausdrucks.

Was es in der Praxis tut (und ich habe diesen Code Dutzende Male selbst geschrieben), geht davon aus, dass someFun/0 eine Funktion ist, die eine Zeichenfolge mit nur Ziffern zurückgibt und diese Zeichenfolge dann in eine Liste konvertiert die Ziffern. Wenn also someFun() "12345" zurückgegeben wird, ist das Ergebnis dieses Listenverständnisses [1, 2, 3, 4, 5].

Wenn Sie mit dem Konzept einer map Funktion (wie in MapReduce) vertraut sind, dann sollte das jetzt ziemlich vertraut klingen.

Diese wikibooks Seite sieht aus wie eine gute Einführung in Erlang Listenkomprehensionen:

http://en.wikibooks.org/wiki/Erlang_Programming/List_Comprehensions

Joe Armstrong Buch "Programming Erlang", aus dem Pragmatische Bücherregal, (http://pragprog.com/titles/jaerlang/programming-erlang) umfasst auch Listenkomprehensionen wirklich gut (zusammen mit allem anderen Erlang verwandt). Ausgezeichnetes Buch, sehr zu empfehlen, usw.

1

Die normale Dokumentationsseite für Listenkomprehensionen im Erlang Reference Manual Abschnitt ist 6,22 und in Programming Examples Abschnitt 3.

Beide sind auf dem main documentation page (klicken Sie auf die Erlang Programmierung Folder auf die linke Menüleiste).

Die Erlang Dokumentation ist fab - es ist nur das Layout ein bisschen shonky ist ...

+0

tote Links, ya könnte diese aktualisieren möchten. – EvilTeach

+0

@EvilTeach * Shonky-Links. – providence

+0

Links wie gewünscht behoben. –