我是Clojure的新手。
我正在开发井字游戏
我正在尝试制作一个“格式化”面板的功能,该功能是一张以位置编号作为键,关键字:x :o和:e值(:e表示空)的地图。
我想在关键字名称列表中每3插入一个换行符。
例如,"x" "x" "x" "e" "e" "e" "e" "e" "e"应将其转换为,"x" "x" "x" "\n" "e" "e" "e" "\n" "e" "e" "e"然后将这些字符串连接起来,以便可以打印它。
(defn- newline-every
[n list]
(if (empty? list)
[]
(let [[fst snd] (split-at n list)]
(concat
(conj fst "\n")
(newline-every n snd)))))
Run Code Online (Sandbox Code Playgroud)
这是Clojure,所以肯定有很多方法可以一齐完成。这是一种尝试:
(flatten (interpose "\n" (partition n list))))
Run Code Online (Sandbox Code Playgroud)
正如使用者amalloy所评论的那样,永远不会有使用的借口flatten,因此这是一种更好的方法:
(apply concat (interpose ["\n"] (partition n list))))
Run Code Online (Sandbox Code Playgroud)
从给定的字符串序列(都包含一个字符)开始给出:
... > (newline-every 3 ["x" "x" "x" "e" "e" "e" "e" "e" "e"])
("x" "x" "x" "\n" "e" "e" "e" "\n" "e" "e" "e")
Run Code Online (Sandbox Code Playgroud)
然后可以将其转换为字符串:
... > (apply str (newline-every 3 ["x" "x" "x" "e" "e" "e" "e" "e" "e"]))
"xxx\neee\neee"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |