clojure - 在 clojure 中将函数映射到多项 coll 或 seqence 的好方法
问题描述
我目前正在学习 Clojure,并且正在尝试学习如何以最好的方式做事。今天我在看在序列上做事的基本概念,我知道了map、filter和reduce的基础知识。现在我想尝试对序列中的元素对做一些事情,我找到了两种方法。我应用的函数是 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)
我的意思是,我可以这样做
(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.
但这不是很好。我的背景是 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
该map
行只是加入对,因此“()”不会出现在输出中。
如果您希望每对打印在自己的行上,请更改(apply println)
为(run! println)
. 您的预期输出似乎与您的代码不一致,因此尚不清楚。
推荐阅读
- php - 如何使用codeigniter在编辑页面显示上传的文件(如doc、img等)
- bittorrent - 跟踪器与种子或下载器有关吗?
- sql - 在 Impala 中使用字符串或数组检查子集
- visual-studio-2017 - Visual Studio 2017 输出窗口实体框架异常
- ios - 两个 UIButton 形成一个具有渐变颜色,另一个具有边框和圆角
- maven - 在eclipse中将bootstrap webjars集成到jsf中
- c# - 使用 AJAX 将字符串传递给控制器
- html - 如何将两个元素并排放置
- python - 将 JSON 上传到 Bigquery 未特定错误
- c# - 从 JSON 数组中查找最大值