Haskell Syntax: die Bedeutung von {..} und @

7

Ich lerne gerade Jessod / Haskell.

Im folgenden Code ( Ссылка ) gibt es zwei Dinge, die ich nicht verstehe (und eine nachfolgende Frage ).

  1. {..} - was heißt das? (Es ist eine harte Zeit zu googeln.)
  2. person@Person - Was bewirkt das @ -Zeichen?
  3. Gibt es eine Möglichkeit, wie ich Antworten auf die nicht umsetzbare Haskell-Syntax finden kann, ohne Sie alle auf StackOverflow zu stören?

code:

%Vor%     
fadedbee 24.09.2013, 10:32
quelle

3 Antworten

13

Für die Punkte 1 und 2, denke ich, beziehen Sie sich auf die Zeile

%Vor%

Das {..} kommt von RecordWildcards Erweiterung. Grundsätzlich werden alle Felder des Person Datentyps in den Geltungsbereich einbezogen. Deshalb können Sie name und age in der obigen Hamlet-Vorlage verwenden.

Das @ dient als Alias. Jedes Mal, wenn Sie id@deconstructor_expr sehen, können Sie id für den gesamten Wert verwenden, der von deconstructor_expr dekonstruiert wird. Zum Beispiel können Sie

haben %Vor%

und a sind die tail der Argumentliste, solange die Liste mindestens 2 Elemente enthält (dh f ist tail für Listen mit mehr als 2 Elementen).

Ohne diese beiden müsste die gesamte Funktion in

geändert werden %Vor%

Beachten Sie, dass name und age Funktionen aus dem Datensatz in das spezifische Feld sind und das bedeutet, dass Sie andere Namen für die Werte verwenden müssen (die ' -enden Variablen). Da wir nicht mehr @ verwenden, benötigen wir separate Zeilen für person und für die Felder.

Eine andere Alternative wäre

%Vor%

Sie müssen weiterhin die Funktionen name und age aufrufen.

Für Punkt 3 besteht die Möglichkeit, im IRC auf #haskell zu gehen und dort zu fragen. Wie auch immer, die gleichen Leute von hier sind hier, es ist keine Mühe zu fragen.

    
Mihai Maruseac 24.09.2013, 10:38
quelle
7

Fügen Sie anderen Antworten hinzu, um nach einer nicht-googlen Syntax zu suchen. symbolhound.com .

    
Nikita Volkov 24.09.2013 11:25
quelle
2

{..} entpackt einen Datensatz in Variablen. In Ihrem Fall definiert es name und age . @ nimmt den gesamten Wert in einer Musterübereinstimmung, also wäre in person@Person {..} , person der ursprüngliche Person -Wert.

    
rightfold 24.09.2013 10:38
quelle

Tags und Links