Przekazanie kluczy do innej funkcji w xml

0

Pytanie

Właśnie zacząłem pracować z xml, ale, jak się wydaje, nie mogę zrozumieć, jak korzystać/tworzenie funkcji wyższego rzędu.

Ja podzieliłem kolekcję i chcę przenieść ją do innej funkcji, która coś zrobi z oknem elementów. Nie wiem, jak to zrobić.

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

Myślę, że podstawowy plan był taki.

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

Możliwe, że jestem coraz dalej od siebie, ale widzę też, że istnieją inne funkcje, takie jak ograniczenie i zastosowanie, mogą robić coś takiego, prawda? Chociaż w większości przykładów, które widzę, to jest tak, że oni wykonują operacje na dwóch elementów jednocześnie, które są podobne do (partition 2 1 foo)

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

Najlepsza odpowiedź

1

Można zrobić coś takiego

(defn bar [start next end])


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

lub, jeśli chcesz zadzwonić bar bezpośrednio można użyć деструктурирование

(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

Twoje pytanie mają charakter ogólny, i istnieje więcej sposobów, aby osiągnąć ten cel, opartych na oczekiwanym wyniku i używanej funkcji.

Jeśli chcesz przywrócić kolejność wyników, użyjmap iapply:

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

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

Dla lepszej czytelności można użyć->> makro.

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

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

Można uniknąć applyjeśli twoja funkcja niszczy uzyskanych sekwencji:

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

Jeśli chcesz wywołać funkcję, aby uzyskać efekt uboczny, a następnie przywrócić nilużyjrun!:

(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

W innych językach

Ta strona jest w innych językach

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