Me gustaría obtener el elemento más pequeño de un vector. Para esto yo uso combinar las funciones reduce
y min
. Sin embargo, al proporcionar mi propia implementación de min
consigo resultados inesperados:Resultado inesperado de la función de reducción
user=> (reduce (fn [x y] (< x y) x y) [1 2 3 2 1 0 1 2])
2
user=> (reduce min [1 2 3 2 1 0 1 2 3])
0
La reducir con el estándar min
devuelve 0 como se esperaba. Sin embargo, cuando proporciono mi propia implementación, devuelve 2. ¿Qué estoy haciendo mal?
realmente. La implementación de 'min' proporciona un ejemplo de 'reducir' que se usa con una función que no tiene una implementación nullary en Clojure. Además, el caso unario nunca es usado por Clojure's 'reduce'; una secuencia de longitud 1 siempre se reduce a su único elemento. En definitiva, necesitas un caso nulary si vas a tratar con secuencias vacías (si estás dispuesto a tratarlas como una entrada errónea, puedes prescindir de ellas) y definitivamente necesitas un caso binario (si nunca vas a hacerlo) tratar con secuencias de longitud> 1, no tiene sentido usar 'reducir' de todos modos). –
@Michal, ah tienes toda la razón. 0 y 2 argumentos. – dnolen