Pasando particiones a otra función en clojure

0

Pregunta

Yo soy sólo comenzó a clojure, pero me parece que no puede averiguar mediante el uso de/la creación de funciones de orden mayor.

Yo particiones de una colección y quiero pasar que en otra función que le hiciera algo a la ventana de elementos. No estoy seguro de cómo ir sobre 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)
    ;;maybe do here before passing
    (bar stand next end)
)

Yo podría estar adelantando a mí mismo, pero también veo que hay otras funciones como reducir y aplicar pueden hacer algo similar a la derecha? Aunque, la mayoría de los ejemplos que me vienen a ella para que realice las operaciones en dos elementos a la vez que son similares a (partition 2 1 foo)

clojure higher-order-functions
2021-11-20 10:49:57
2

Mejor respuesta

1

Puedes hacer algo como

(defn bar [start next end])


(defn faz [collect]
  (let [partitions (partition 3 1 collect)]
    (apply bar partitions)
    ))

o si quieres llamar bar directamente, puede utilizar desestructuración

(defn bar [start next end])

(defn faz [collect]
  (let [partitions (partition 3 1 collect)
        [start next end] partitions]
    (bar start next end)
    ))
2021-11-20 11:08:30
0

Su pregunta es general y hay más maneras de lograr esto, basado en el resultado esperado y se utiliza la función.

Si se desea volver a la secuencia de resultados, el uso de map y apply:

(defn results-for-triplets [collect]
  (map #(apply + %) (partition 3 1 collect)))

(results-for-triplets [1 2 3 4 5])
=> (6 9 12)

Para una mejor legibilidad, puede utilizar ->> macro.

(defn results-for-triplets [collect]
  (->> collect
       (partition 3 1)
       (map #(apply + %))))

(results-for-triplets [1 2 3 4 5])
=> (6 9 12)

Usted puede evitar applysi su función destructures pasado secuencia:

(defn sum3 [[a b c]]
  (+ a b c))

(defn results-for-triplets [collect]
  (->> collect
       (partition 3 1)
       (map sum3)))

(results-for-triplets [1 2 3 4 5])
=> (6 9 12)

Si usted desea llamar a la función de efecto secundario y, a continuación, volver nil, uso run!:

(defn print3 [[a b c]]
  (println a b c))

(defn results-for-triplets [collect]
  (->> collect
       (partition 3 1)
       (run! print3)))

(results-for-triplets [1 2 3 4 5])
1 2 3
2 3 4
3 4 5
=> nil
2021-11-20 11:51:18

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................