es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pasando particiones a otra función en Clojure.

Acabo de empezar con clojure pero no puedo entender cómo usar/crear funciones de orden superior.

He dividido una colección y quiero pasarla a otra función que hará algo con la ventana de elementos. No estoy seguro de cómo hacer esto.

(def foo [:a :b :c :d :e])
(partition 3 1 foo)
;; => ((:a :b :c) (:b :c :d) (:c :d :e))
(defn bar [start next end])

Creo que el esquema básico sería:

(defn faz [collect]
    (partition 3 1 collect)
    ;; quizás hacer algo aquí antes de pasar
    (bar start next end)
)

Estoy yendo un poco adelante, pero también veo que hay otras funciones como reduce y apply, ¿pueden hacer algo similar, verdad? Aunque la mayoría de los ejemplos que veo hacen operaciones con dos elementos a la vez, lo que es similar a (partition 2 1 foo).

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Clojure y funciones de orden superior, definitivamente puedo ayudarte con esto.

    En primer lugar, para crear una función de orden superior en Clojure, deberá definir una función que tome otra función como argumento o devuelva una función como su salida. Esto le permite pasar funciones como datos, lo cual es increíblemente poderoso cuando se trata de la programación funcional.

    En su caso, parece que desea pasar una colección particionada a otra función (llamada “bar”) que realizará alguna operación en cada ventana de elementos. Para hacer esto, puede definir una función llamada “faz” (o cualquier otro nombre que desee) que tome una colección como argumento, la particione usando la función “partition” y luego pase cada ventana de elementos a “bar” usando la función “map”:

    (defn faz [collection]
      (map bar (partition 3 1 collection)))
    

    Aquí, estamos usando “map” para aplicar la función “bar” a cada ventana de elementos en la colección particionada. La salida resultante será una secuencia de los resultados de cada llamada a “bar”.

    En cuanto a su pregunta sobre otras funciones como “reduce” y “apply”, estas son de hecho otras funciones de orden superior que puede usar en Clojure. “Reduce” se puede usar para aplicar una función a toda una colección (no solo pares de elementos), mientras que “apply” se usa para pasar un número variable de argumentos a una función. Sin embargo, estas funciones pueden no ser tan útiles para su caso de uso específico con una colección particionada y una función que toma una ventana de elementos como entrada.

Comments are closed.