我正在尝试学习 Clojure 和函数式编程,为此我正在尝试解决 Codingbat 中的练习。当我必须从另一个子数组中找到一个子数组 [1 2 3] 时,我被卡住了。从页面:
给定一个整数数组,如果 .. 1, 2, 3, .. 出现在数组中的某个位置,则返回 True。
我喜欢的不是答案本身,而是我如何解决的想法。好吧,这几乎等于答案,但任何想法都可以。
谢谢。
把它从“数组中的项目”考虑到接受序列和返回序列的函数。这使匹配的任务变得复杂,并决定您匹配的内容是否能解决您的问题。(我相当确定 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]