Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 希望用可选的步长输入编写一个跨越函数_Clojure_Clojure Contrib - Fatal编程技术网

Clojure 希望用可选的步长输入编写一个跨越函数

Clojure 希望用可选的步长输入编写一个跨越函数,clojure,clojure-contrib,Clojure,Clojure Contrib,我一直在尝试编写一个Clojure函数,它从集合或向量中获取一个跨度。 例如,我想操纵一个集合,例如 (:a:b:c:d:e:f:g:h) 通过两个步骤中的第二个元素到第五个元素。 因此,输出 (:b:d) 看看(取n个coll)函数 这与你的问题并不完全相符,但它是灵感的良好起点 当然,您可以通过以下方式检查源代码: (source take-nth) 如果您现在还没有弄明白,这里有一个函数可以满足您的需要 (defn take-span [start end step coll]

我一直在尝试编写一个Clojure函数,它从集合或向量中获取一个跨度。 例如,我想操纵一个集合,例如 (:a:b:c:d:e:f:g:h) 通过两个步骤中的第二个元素到第五个元素。 因此,输出 (:b:d)

看看(取n个coll)函数

这与你的问题并不完全相符,但它是灵感的良好起点

当然,您可以通过以下方式检查源代码:

(source take-nth)

如果您现在还没有弄明白,这里有一个函数可以满足您的需要

(defn take-span 
  [start end step coll]
  (take-nth step (take (- end start) (drop start coll))))

(take-span 1 4 2 '(:a :b :c :d :e :f :g :h))

希望这有帮助

有很多方法可以做到这一点。您只需遍历序列,一边收集所需元素,一边跟踪计数。很好的递归练习。想一想你将如何在命令式语言中实现它,然后把它转换成递归。或者你可以使用凯龙的建议,以及
放弃
接受
。我为自己编了一个解决方案,但我想知道这是否是家庭作业。如果是这样的话,这些提示应该足以解决这个问题,或者为新的问题提供一个基础。那么,有人使用Clojure作为课程语言吗?德克·盖尔斯的答案就是我所建议的。有什么特别的原因你还没有接受任何答案吗?对不起,我只是没有看到复选标记。
(defn take-span 
  [start end step coll]
  (take-nth step (take (- end start) (drop start coll))))

(take-span 1 4 2 '(:a :b :c :d :e :f :g :h))