Clojure Grundlagen: Zählen von Frequenzen

8

Ich lerne Clojure, und ich habe diesen Codecode online gesehen:

%Vor%

Und es, wie gesagt, zählen Vorkommen der Zahl 42 in coll. Ist #{42} eine Funktion? Die Clojure-Dokumentation auf dem Filter sagt, dass es sein sollte, da das Snippet wie angekündigt funktioniert. Ich habe nur keine Ahnung, wie es funktioniert. Wenn jemand das für mich klären könnte, wäre das großartig. Meine eigene Lösung für dieselbe Sache wäre gewesen:

%Vor%

Wie kommt es, dass meine Filterfunktion Klammern hat und das Snippet, das ich online gefunden habe, geschweifte Klammern um die Filterfunktion hat ( #(...) vs. #{...} )?

    
vim 03.05.2014, 18:10
quelle

2 Antworten

16
%Vor%

Definiert einen Satz ...

%Vor%

Interessanterweise implementiert das Set IFn, so dass Sie es wie eine Funktion behandeln können. Das Verhalten der Funktion ist "wenn dieses Element in der Menge existiert, gebe es zurück".

%Vor%

Andere Sammlungen, wie z. B. map und vector, stehen auf ähnliche Weise als Funktionen zur Verfügung und werden je nach Bedarf nach Schlüssel oder Index abgerufen.

%Vor%

Süß, nein? : -)

    
pete23 03.05.2014, 18:25
quelle
1

Ja, #{42} ist eine Funktion,

  • weil es ein Set ist, und Sets, neben anderen Fähigkeiten, sind Funktionen: Sie implementieren die clojure.lang.IFn Schnittstelle.
  • Auf einen beliebigen Wert in der Menge angewendet, geben sie ihn zurück; auf etwas angewendet Andernfalls geben sie nil zurück.
  • Also testet #{42} , ob das Argument 42 ist (nur nil und false sind falsch, denken Sie daran).

Der Clojure-Weg ist, alles zu einer Funktion zu machen, die sinnvollerweise eins sein könnte:

  • Sets funktionieren als Test für die Mitgliedschaft.
  • Maps funktionieren als Schlüsselsuche.
  • Vektoren funktionieren als Indexsuche.
  • Schlüsselwörter funktionieren als Suche im map-Argument.

Dies

  • speichert oft ein get ,
  • erlaubt Ihnen, wie in der Frage, nackte Datenstrukturen an Funktionen höherer Ordnung zu übergeben wie filter und map und
  • Bei Keywords können Sie transparent zwischen Karten und Datensätzen wechseln zum Speichern Ihrer Daten.
Thumbnail 07.05.2014 08:50
quelle

Tags und Links