Заменяйте местами элементы во входной последовательности - PullRequest
0 голосов
/ 27 ноября 2018

Как поменять местами соседние элементы во входной последовательности, используя clojure.[10 15 20 25] ---> [15 10 25 20] [: q: e: g: t: p] ---> [: e: q: t: g: p]

Вот как я это сделал, но уверен, что есть лучшие способы сделать это!

(defn switch [s]
(loop [[a b & rest] s
       result []]
  (if (empty? rest)
    (cond
        ;;empty sequence
        (empty? s) result
        ;;odd sequence
        (nil? b) (conj result a)
        ;;even sequence
        :else (conj result b a)
    )
    (recur rest (conj result b a))))
    )

1 Ответ

0 голосов
/ 27 ноября 2018
(let [A [:q :e :g :t :p]]
    (->> A
         (partition-all 2)
         (mapcat reverse)))
...