2012-07-15 104 views
1

我正在努力學習Clojure和函數式編程,爲此我打算從Codingbat解決練習。當我必須從另一個子數組中找到子數組[1 2 3]時,我被卡住了。來自頁面:Clojure子陣列

給定一個整數數組,如果.. 1,2,3,...在數組中出現,則返回True ..在 數組中出現。

我會愛,而不是本身的答案,但我怎麼能解決的想法。那麼,這幾乎等於答案,但任何想法都可以。

謝謝。

+0

亞歷刪除的答案非常值得投票:( – 2012-07-15 05:23:08

+0

,爲什麼呢? – Cheluis 2012-07-15 14:21:52

回答

7

隨着somepartition的組合:

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

注意的是,上述不返回布爾值結果(但它仍然可以用作條件句檢驗)。如果你真的想要一個布爾結果,你可以使用boolean

+0

優秀和簡潔的答案:) +1 – 2012-07-15 05:04:32

+0

優秀!謝謝。 – Cheluis 2012-07-15 14:20:54

4

把它從「在數組中的項目」中思考到帶有序列和返回序列的函數。這個解複合匹配任務並決定你匹配的是否解決了你的問題。 (IM相當肯定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函數返回子向量爲了-1時

user>(subvec (vec (range 1000)) 10 20) 
[10 11 12 13 14 15 16 17 18 19] 
+0

非常好,明確的答案。非常感謝你 – Cheluis 2012-07-15 14:21:38