我目前正在学习Clojure,并且正在尝试学习如何以最佳方式做事。今天,我正在研究按顺序执行事务的基本概念,我了解映射,过滤和归约的基础知识。现在,我想尝试对序列中的成对元素执行操作,并且发现了执行该操作的两种方法。我应用的功能是println。输出仅为12 34 56 7
(def xs [1 2 3 4 5 6 7])
(defn work_on_pairs [xs]
(loop [data xs]
(if (empty? data)
data
(do
(println (str (first data) (second data)))
(recur (drop 2 data))))))
(work_on_pairs xs)
Run Code Online (Sandbox Code Playgroud)
我的意思是我可以这样
(map println (zipmap (take-nth 2 xs) (take-nth 2 (drop 1 xs))))
;; prints [1 2] [3 4] [5 6], and we loose the last element because zip.
Run Code Online (Sandbox Code Playgroud)
但这并不是真的很好。我的背景是Python,在这里我只能说zip(xs[::2], xs[1::2])但我猜这不是Clojure的方法。因此,我正在寻找有关如何以最佳Clojure方式执行此操作的建议。
我意识到我对Clojure还是很陌生,我什至不知道这种操作叫什么。
感谢您的输入
这可以通过以下方式完成partition-all:
(def xs [1 2 3 4 5 6 7])
(->> xs
(partition-all 2) ; Gives ((1 2) (3 4) (5 6) (7))
(map (partial apply str)) ; or use (map #(apply str %))
(apply println))
12 34 56 7
Run Code Online (Sandbox Code Playgroud)
该map行仅用于连接对,因此“()”不会最终出现在输出中。
如果要每对打印在自己的行上,请更改(apply println)为(run! println)。您的预期输出似乎与您的代码不一致,因此尚不清楚。
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |