1

私はClojureと関数型プログラミング全般を学ぼうとしています。そのために、 Codingbatの演習を解決しようとしています。別のサブ配列からサブ配列[123]を見つけなければならないときに行き詰まります。ページから:

intの配列が与えられた場合、.. 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返します-1回

user>(subvec (vec (range 1000)) 10 20)
[10 11 12 13 14 15 16 17 18 19]
于 2012-07-15T04:56:06.853 に答える