Trecerea partiții pentru o altă funcție în clojure

0

Problema

Am început clojure dar eu nu pot par să dau seama de utilizarea/crearea de funcții de ordin superior.

Am portionat-o colectie si vreau sa întâmplat că într-o altă funcție care va face ceva pentru fereastra de elemente. Nu sunt sigur cum de a merge despre a face acest lucru.

(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])

Cred că schița de bază ar fi.

(defn faz [collect]
    (partition 3 1 collect)
    ;;maybe do here before passing
    (bar stand next end)
)

S-ar putea fi mai departe de mine dar am vedea, de asemenea, există și alte funcții, cum ar fi de a reduce și de a aplica ei pot face ceva similar, nu? Deși, cele mai multe exemple le văd au atât ei de a efectua operațiuni pe două elemente la un moment dat, care sunt similare cu (partition 2 1 foo)

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

Cel mai bun răspuns

1

Puteți face ceva de genul

(defn bar [start next end])


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

sau, dacă doriți pentru a apela bar direct, puteți folosi destructurare

(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

Întrebarea ta este general, și există mai multe moduri de a realiza acest lucru, bazat pe rezultatul așteptat și utilizate funcții.

Dacă doriți să se întoarcă secvență de rezultate, utilizați map și apply:

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

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

Pentru o mai bună lizibilitate, puteți utiliza ->> macro.

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

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

Puteți evita applydacă funcția dumneavoastră destructures trecut secvență:

(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)

Dacă doriți să apelați funcția pentru efect secundar și apoi să se întoarcă nil, utilizare 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

În alte limbi

Această pagină este în alte limbi

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