Clojure子阵列

Che*_*uis 1 clojure

我正在努力学习Clojure和函数式编程,为此,我想要解决Codingbat的练习.当我必须从另一个子阵列中找到一个子阵列[1 2 3]时,我陷入了困境.从页面:

给定一个int数组,如果.. 1,2,3,..出现在某个数组中,则返回True.

我很乐意,不是答案本身,而是我如何解决的想法.嗯,这几乎等于答案,但任何想法都会没问题.

谢谢.

Jon*_*nas 7

随着组合somepartition:

(some #{[1 2 3]} (partition 3 1 some-collection))
Run Code Online (Sandbox Code Playgroud)

请注意,上面的内容不会返回布尔结果(但它仍然可以用作条件中的测试).如果你真的想要一个布尔结果你可以使用boolean


Art*_*ldt 5

将其从“数组中的项”的思维转变为采用序列和返回序列的函数。这使匹配任务变得复杂,并确定匹配的内容是否可以解决您的问题。(我相当确定 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)