我发现自己需要将一系列元素转换为一系列"对",其中第一个元素是初始序列的元素,而while的第二个元素是该元素的初始序列的尾部.
(abcde) - >((a(bcde))(b(cde))(c(de))(d(e))(e()))
我写了这个:
(defn head-and-tail [s]
(cond (empty? s) ()
:else (cons (list (first s) (rest s)) (head-and-tail (rest s)))))
Run Code Online (Sandbox Code Playgroud)
是否有内置功能,或内置功能的简单组合,可以更容易地做到这一点?
这是一种方法:
(let [xs [1 2 3 4]]
(map list xs (iterate rest (rest xs))))
;= ((1 (2 3 4)) (2 (3 4)) (3 (4)) (4 ()))
Run Code Online (Sandbox Code Playgroud)
这当然可以调整,以满足您的需求,比如你可能更喜欢map vector到map list等
另外,关于head-and-tail问题文本中的impl:双向分支cond将更好地编写为if.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |