我正在努力学习Clojure和函数式编程,为此,我想要解决Codingbat的练习.当我必须从另一个子阵列中找到一个子阵列[1 2 3]时,我陷入了困境.从页面:
给定一个int数组,如果.. 1,2,3,..出现在某个数组中,则返回True.
我很乐意,不是答案本身,而是我如何解决的想法.嗯,这几乎等于答案,但任何想法都会没问题.
谢谢.
(some #{[1 2 3]} (partition 3 1 some-collection))
Run Code Online (Sandbox Code Playgroud)
请注意,上面的内容不会返回布尔结果(但它仍然可以用作条件中的测试).如果你真的想要一个布尔结果你可以使用boolean
将其从“数组中的项”的思维转变为采用序列和返回序列的函数。这使匹配任务变得复杂,并确定匹配的内容是否可以解决您的问题。(我相当确定 decomplect 只存在于 Clojure 字典中)
一般来说:
autotestbed.core> (partition 3 1 (range 10))
((0 1 2) (1 2 3) (2 3 4) (3 4 5) (4 5 6) (5 6 7) (6 7 8) (7 8 9))
(filter your-predicate-here (partition ...)
在更大的例子中,有些人会选择将其分成几个函数,然后组合它们。
解决您原来的问题:(对于谷歌从问题标题中带来的人)
该subvec
函数按 order-1 时间返回子向量
user>(subvec (vec (range 1000)) 10 20)
[10 11 12 13 14 15 16 17 18 19]
Run Code Online (Sandbox Code Playgroud)