1

我正在尝试学习 Clojure 和函数式编程,为此我正在尝试解决 Codingbat 中的练习。当我必须从另一个子数组中找到一个子数组 [1 2 3] 时,我被卡住了。从页面:

给定一个整数数组,如果 .. 1, 2, 3, .. 出现在数组中的某个位置,则返回 True。

我喜欢的不是答案本身,而是我如何解决的想法。好吧,这几乎等于答案,但任何想法都可以。

谢谢。

4

2 回答 2

7

结合somepartition

(some #{[1 2 3]} (partition 3 1 some-collection))

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

于 2012-07-15T04:55:18.533 回答
4

把它从“数组中的项目”考虑到接受序列和返回序列的函数。这使匹配的任务变得复杂,并决定您匹配的内容是否能解决您的问题。(我相当确定 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]
于 2012-07-15T04:56:06.853 回答