clojure for loop, speichern Sie die Werte in einem Set oder einer Map

7

Dieser hat mich schon eine Weile belästigt, Wie sollten wir einen Wert in einem Set oder einer Map in einer for-Schleife speichern?

%Vor%

Ich weiß, das wird nicht funktionieren, aber ich möchte eine ähnliche Funktionalität, wo die Menge schließlich [0 0] [0 1] ... [0 9] [1 0] ... [9 9 enthält ]

Danke

    
KaKa 29.09.2011, 17:53
quelle

5 Antworten

13

Wenn ich Ihre Frage richtig verstanden habe, müssen Sie Ihren Ausdruck umdrehen:

%Vor%

Hier ist zu beachten, dass for zurückgegeben wird ein Wert (eine Lazy-Sequenz) im Gegensatz zu For-Schleifen in Imperativ-Sprachen wie Java und C.

    
Jonas 29.09.2011, 18:27
quelle
6

Ist das was du willst?

%Vor%

Und wenn Sie nur die Liste als eine Menge wollen:

%Vor%

Sie werden mit einer Reihe von Paaren enden.

    
ponzao 29.09.2011 18:32
quelle
5

Allgemein Wenn Sie eine Menge oder eine Karte oder einen anderen "Einzelwert", der kein Seq von einer "wiederholten" verallgemeinerten Operation in einer Seq ist, zurückgeben möchten, ist reduce mehr idiomatisch / direkt als loop/recur und for gibt immer eine seq zurück (keine Menge oder Map).

%Vor%

Beachten Sie, dass (für ..) hier nur verwendet wird, um einen Seq zu erzeugen, der alle Werte enthält, die in das einzelne Ergebnis set kompiliert werden sollen. Oder zum Beispiel:

%Vor%     
Joost Diepenmaat 29.09.2011 19:22
quelle
0

clojure hat mehrere großartige Systeme, um den veränderlichen Zustand zu verwalten. In diesem Fall möchten Sie vielleicht ein Atom mit einem Satz

Ihre anderen Optionen sind:

  • ein Hinweis , wenn mehr als eine Änderung erforderlich ist (viele Threads koordiniert)
  • a var wenn dies ein single threaded sein soll (eine var funktioniert hier genauso gut wie ein Atom)
  • ein Agent , wenn Sie den Wert von asynchron festlegen möchten

natürlich for gibt eine Sequenz bereits zurück, so dass Sie vielleicht nur

möchten %Vor%     
Arthur Ulfeldt 29.09.2011 18:24
quelle
0

Ich denke, Sie können auch eine transiente Datenstruktur in diesem Szenario verwenden.

%Vor%

Nur ein Codebeispiel, nicht getestet.

    
Ning Sun 30.09.2011 06:07
quelle