Deseo aplicar una serie de pruebas en mi lista y asegurarme de que se pasen todas las pruebas. ¿Existe una función similar a "andmap" en Clojure?¿Existe una función similar a "andmap" en clojure?
Respuesta
Usted podría utilizar every?
:
user=> (every? string? '("hi" 1))
false
Aquí está la documentación sobre every?
.
every?
preguntará "¿Esta función única devuelve verdadera para cada miembro del seq", que es cercana a lo que creo que está solicitando. Una mejora en every?
tomaría una lista de funciones y preguntaría "Son todos estos predicados verdaderos para cada miembro de esta secuencia".
Aquí es un primer intento:
(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
escribí andmap
como una macro que tiene predicados como sus argumentos y construye una función que "envuelve una and
alrededor de los predicados", es decir,
(andmap integer? odd?)
==>
(fn [x] (and (integer? x)
(odd? x)))
(no se expande a exactamente esto, pero se expande a algo equivalente a esto)
Esto tiene la ventaja de que shortcuircuts en los predicados para que pueda escribir
(every? (andmap integer? odd?) [1 3 "a string"])
sin obtener una excepción de tiempo de ejecución que se tendría con Arthurs answer.
Aquí es la definición de andmap
:
(defmacro andmap ([] `(fn [& x#] true)) ([p & ps] `(fn [& x#] (and (apply ~p x#) (apply (andmap [email protected]) x#)))))
También es posible definir andmap
como una función que también cortocircuitos en él es predicados debido a la pereza:
(defn andmap [& ps] (fn [& x] (every? true? (map (fn [p] (apply p x)) ps))))
Los predicados a andmap puede tomar una cantidad arbitraria de argumentos, por lo que es posible escribir
(map (andmap #(and (integer? %1)
(integer? %2))
#(and (odd? %1)
(even? %2))
<)
[1 3 9]
[2 6 "string"])
que evalúa a (true true false)
.
Clojure 1.3 agregará every-pred (y el relacionado con algunos-fn para la versión "o").
clojure.core/cada-pred ([p] [p1 p2] [p1 p2 p3] [p1 p2 p3 & ps])
toma un conjunto de predicados y devuelve una función f que devuelve verdadero si todos sus predicados de composición devuelven un valor verdadero lógico contra todos sus argumentos, de lo contrario devuelve falso. Tenga en cuenta que f está cortocircuitándose en el sentido de que detendrá la ejecución en el primer argumento que desencadena un falso resultado lógico contra los predicados originales.
Una implementación ingenua podría ser:
(defn cada-pred [& Preds] (fn [& args] (cada # (cada% args) Preds))??)
pero el reales la implementación tendrá un mejor rendimiento.
- 1. ¿Existe una función similar a setTimeout() (JavaScript) para PHP?
- 2. Clojure: determine si existe una función
- 3. ¿Existe algo similar a gsub en javascript?
- 4. Undef'ing una función similar a la macro
- 5. ¿Existe un serializador CSV? (similar a XmlSerializer)
- 6. ¿Cómo convertir una cadena a una función en Clojure?
- 7. Java: popen() - función similar?
- 8. ¿Función en SQL Server 2008 similar a GREATEST en mysql?
- 9. ¿Cómo puedo definir una función en Clojure?
- 10. una función de Fibonacci recursiva en Clojure
- 11. Ejecutando una función enlazada dinámicamente en Clojure
- 12. Función similar SwingUtilities.invokeLater en android?
- 13. función similar refactoring pattern
- 14. Llamar a una función desde una cadena con el nombre de la función en Clojure
- 15. ¿Hay alguna función en Perl similar a GetType() en C#?
- 16. Cómo convertir un objeto similar a un iterador java en una secuencia de clojure
- 17. Ingrese un conjunto de puntos a una función clojure
- 18. Cómo llamar a una función variadica de Clojure desde Java
- 19. ¿Hay una función en Matlab similar a la función java String.split (delimitador)?
- 20. ¿Existe una función de suspensión alternativa en C a milisegundos?
- 21. ¿Cómo implementaría una funcionalidad similar a la url_for de Rails con Clojure y sus frameworks web?
- 22. Alinear una función con macros Clojure
- 23. función de Python que similar a golpear a encontrar comandos
- 24. función inet_aton similar para IPv6
- 25. Algo similar a split()?
- 26. Tratar macro Clojure como una función
- 27. Función de techo similar a Excel en python?
- 28. Limpiar la función Clojure
- 29. Determine si existe una función en bash
- 30. Cómo defnir una función de una cadena en Clojure?
¿podría agregar una entrada y salida de emaple? –