Ich möchte eine Reihe von Tests auf meiner Liste anwenden und sicherstellen, dass alle Tests bestanden werden. Gibt es in Clojure eine ähnliche Funktion wie "andmap"?Gibt es in clojure eine ähnliche Funktion wie "andmap"?
Antwort
könnten Sie every?
verwenden:
user=> (every? string? '("hi" 1))
false
Hier ist die Dokumentation auf every?
.
every?
werden fragen "Funktioniert diese eine Funktion für jedes Mitglied der Seq True", die nahe ist, was ich denke, dass Sie fragen. Eine Verbesserung auf every?
würde eine Liste von Funktionen nehmen und fragen: "Sind all diese Prädikate für jedes Mitglied dieser Sequenz wahr?". Hier
ist ein erster Versuch:
(defn andmap? [data tests]
(every? true? (for [d data, f tests]
(f d))))
user> (andmap? '(2 4 8) [even? pos?])
true
user> (andmap? '(2 4 8) [even? odd?])
false
ich andmap
als Makro geschrieben, die Prädikate als Argumente und baut eine Funktion übernimmt, dass „wickelt eine and
um die Prädikate“, dh
(andmap integer? odd?)
==>
(fn [x] (and (integer? x)
(odd? x)))
(es erweitert sich nicht zu genau dies, aber es erweitert sich zu etwas Äquivalent dazu)
Dies hat den Vorteil, dass es auf den Prädikaten shortcuircuts, so dass Sie
(every? (andmap integer? odd?) [1 3 "a string"])
, ohne sich eine Laufzeitausnahme schreiben können, wie Sie mit Arthurs answer bekommen würde. Hier
ist die Definition von andmap
:
(defmacro andmap ([] `(fn [& x#] true)) ([p & ps] `(fn [& x#] (and (apply ~p x#) (apply (andmap [email protected]) x#)))))
Es ist auch möglich andmap
als Funktion zu definieren, die auch Kurzschlüsse auf seine Prädikate aufgrund lazyness:
(defn andmap [& ps] (fn [& x] (every? true? (map (fn [p] (apply p x)) ps))))
Die Prädikate andmap kann eine beliebige Anzahl von Argumenten annehmen, so dass es möglich ist,
(map (andmap #(and (integer? %1)
(integer? %2))
#(and (odd? %1)
(even? %2))
<)
[1 3 9]
[2 6 "string"])
zu schreiben
was zu (true true false)
auswertet.
Clojure 1.3 fügt all-pred (und den zugehörigen Suffix für die "oder" -Version) hinzu.
clojure.core/Every-pred ([p] [p1 p2] [p1 p2 p3] [p1 p2 p3 & ps])
einen Satz von Prädikaten nimmt und eine Funktion f, die wahr zurückgibt Wenn alle zusammensetzenden Vergleichselemente einen logischen wahren Wert für alle Argumente zurückgeben, gibt es andernfalls false zurück. Beachten Sie, dass f kurzgeschlossen ist, da es die Ausführung des ersten -Arguments stoppt, das ein logisches falsches Ergebnis gegen die ursprünglichen Prädikate auslöst.
könnte eine naive Implementierung sein:
(defn every-pred [& preds] (fn [& args] (alle # (alle% args) preds))?)
aber die tatsächliche Implementierung wird eine bessere Leistung haben.
- 1. Gibt es eine ähnliche Funktion wie PHP isset() in Go?
- 2. Gibt es in Clojure eine Funktion wie Haskell?
- 3. Gibt es eine ähnliche Funktion wie setTimeout() (JavaScript) für PHP?
- 4. Gibt es in Excel eine Koaleszenz-ähnliche Funktion?
- 5. Gibt es eine PHP-ähnliche checkdate() -Funktion in JavaScript?
- 6. Gibt es in PostgreSQL eine SSIS-ähnliche Funktion?
- 7. Gibt es eine schreibgeschützte ISet-ähnliche Schnittstelle?
- 8. Gibt es in .Net eine zip-ähnliche Methode?
- 9. Gibt es eine AES-Bibliothek für Clojure?
- 10. Gibt es ähnliche Tools wie Intellitrace
- 11. Gibt es eine Reverse-Map-Funktion?
- 12. Gibt es eine Möglichkeit, eine strftime-ähnliche Funktion für Datumsangaben vor 1900 in Python zu verwenden?
- 13. Gibt es eine LINQ-ähnliche Implementierung in Java?
- 14. Gibt es in PHP eine "Java Bean" ähnliche Technologie?
- 15. Gibt es in VisualStudio 2010 eine Eclipse-ähnliche WORD-Abschlussverknüpfung?
- 16. Warum gibt es keinen Blick! Funktion für clojure transiente Vektoren?
- 17. Gibt es einen Operator oder eine Funktion?
- 18. Clojure-ähnliche Art, eine Datenstruktur in einer Schleife zu haben
- 19. Gibt es irgendwelche Clojure DSLs?
- 20. Gibt es in Clojure eine idiomatische Alternative zum Nil-Punning?
- 21. Gibt es eine Clojure-Konvention für die Benennung privater Funktionen?
- 22. Gibt es in clojure einen Befehl ": bis"?
- 23. Wie konvertiert man eine Zeichenfolge in eine Funktion in Clojure?
- 24. Gibt es in Java eine eval() - Funktion?
- 25. Gibt es eine MAKELONGLONG-Funktion?
- 26. Gibt es eine Radix-Funktion in Ruby?
- 27. Gibt es eine Task-Manager-ähnliche Anwendung für Visual Studio?
- 28. Gibt es eine ähnliche getText() von WebElement für XCUIElement
- 29. gibt es sowieso, um eine Lambda-Funktion in clojure zu konstruieren?
- 30. Gibt es eine "map" -Funktion in PHP?
könnten Sie eine Emaple-Eingabe und -Ausgabe hinzufügen? –