¿Hay funciones incorporadas en Clojure similares a las funciones de any
y all
de Python? Por ejemplo, en Python, es all([True, 1, 'non-empty string']) == True
.Clojure equivalente a las funciones "any" y "all" de Python?
Respuesta
(every? f data)
[docs] es la misma que all(f(x) for x in data)
.
(some f data)
[docs] es como any(f(x) for x in data)
excepto que devuelve el valor de f(x)
(que debe ser Truthy), en lugar de sólo true
.
Si desea el mismo comportamiento que en Python, puede usar la función identity
, que simplemente devolverá su argumento (equivalente a (fn [x] x)
).
user=> (every? identity [1, true, "non-empty string"])
true
user=> (some identity [1, true "non-empty string"])
1
user=> (some true? [1, true "non-empty string"])
true
En clojure and
y or
son bastante similares a pitón de all
y any
, con la salvedad de que (al igual que clojure.core/some
) devuelven el elemento que se satifsy que ... por lo tanto se puede utilizar junto con boolean
a convertirlo
(boolean (or "" nil false)) ; "" is truthy in clojure
; => true
(boolean (and [] "" {}() 0)) ; also [], {},() and 0 are truthy
; => true
utilizo boolean
en lugar de true?
ya que este último volverá true
si y sólo si el argumento es el verdadero valor ... así es más boolean
similar a la serpiente pitón de bool
en que se evalúa la truthyness
A diferencia some
& every?
, and
& or
son macros, por lo que si uno siempre quiere convertir el resultado a un valor lógico, no se puede simplemente hacer (def any (comp boolean or))
pero hay que definir una macro como
(defmacro any [& v] `(boolean (or [email protected])))
(defmacro all [& v] `(boolean (and [email protected])))
un efecto secundario/ventaja de ser macros, es que son perezosos/puede cortocircuitos en (al igual que del pitón and
& or
, que son operadores infijos binarios sin embargo)
(any "" (/ 1 0))
; => true
(all nil (/ 1 0))
; => false
y ellos son como pitón de any
y all
, incluso cuando se llama sin argumentos
(any)
; => false
(all)
; => true
en Python:
>>> any([])
False
>>> all([])
True
Si usted prefiere tener que llamar any
/all
con una sola lista/argumento de secuencia, simplemente puede hacer:
(defmacro all [v] `(boolean (and [email protected])))
(all [])
; => true
(all [nil (/ 1 0)])
; => false
- 1. Python equivalente a la función LINQ All?
- 2. Clojure equivalente a Python doctest?
- 3. Python "dir" equivalente en Clojure
- 4. Problema con LÍMITE Y EN/ALL/ANY/SOME subconsulta
- 5. Clojure equivalente a la biblioteca lxml de Python?
- 6. Groovy equivalente para ruby all y ninguno
- 7. ¿Equivalente para las funciones lambda de Python en Java?
- 8. python equivalente a la partición de clojure, ¿todo?
- 9. Creando un XSD válido que está abierto usando <all> y <any> elementos
- 10. Llamar a funciones Java desde Clojure
- 11. python: alternativa a las funciones anónimas
- 12. Python: startswith any alpha character
- 13. Clojure funciones para Emacs?
- 14. Códigos de Python y llamadas a funciones
- 15. Diferencia en Fa # y Clojure al llamar a funciones redefinidas
- 16. ¿Cómo son las funciones del operador in situ de Python diferentes a las funciones estándar del operador?
- 17. Python equivalente a find2perl
- 18. Underscore.js .filter() y .any()
- 19. Java equivalente de correlación de funciones en Python
- 20. Python equivalente a atoi/atof
- 21. Python Equivalente a phpinfo()
- 22. Python: ¿Cómo puedo ejecutar las funciones de Python en paralelo?
- 23. ¿Las listas de Python tienen un equivalente a dict.get?
- 24. Composición de funciones en Clojure?
- 25. funciones de JavaScript A La Python Las cadenas de documentación
- 26. ¿Cómo burlarse de las llamadas a funciones encadenadas en python?
- 27. Python equivalente de PHP's compact() y extract()
- 28. NSPredicar 'El lado izquierdo de un operador ALL o ANY debe ser un NSArray o NSSet'
- 29. llamando a las funciones de Objective C desde Python?
- 30. Llamando a las funciones de Python desde C++
¡Exactamente lo que estaba buscando, gracias! – TorelTwiddler
Creo que usar la función de identidad en lugar de una nueva anónima sería mejor. ej. (every? identity [1, true, "non-empty-string"]), (some identity [1, true, "non-empty-string"]) ... –
+1 para el comentario de Verneri sobre el uso de la identidad. Es más idiomático. – Gert