3

私はClojureを初めて使用するので、ここ数日ClojureKoansを使用しています。シーケンス理解のセクションまで、物事はかなり順調に進んでいました。私はこのセクションで苦労しています。答えはありますが、どうやってこれらの答えにたどり着いたのわかりません。過去2日間、Clojureについてかなり読んだことがありますが、Rubyとは大きく異なるため、理解するのに時間がかかります。

このセクションには5つの「問題」があり、私には理解できません。これが私を特に混乱させた問題の2つの例です:

"And also filtering"
(= '(1 3 5 7 9)
  (filter odd? (range 10))
  (for [index __ :when (odd? index)]
    index))

"And they trivially allow combinations of the two transformations"
(= '(1 9 25 49 81)
  (map (fn [index] (* index index))
    (filter odd? (range 10)))
  (for [index (range 10) :when __]
    __))

Clojureの経験がある人のために、このセクションのソリューションにどのように到達したかを説明していただけますか?シーケンスについていくら読んでも、このセクションに頭を悩ませることはできません。ありがとう!

4

3 に答える 3

2

私はあなたが理解mapしてfilter機能していると仮定しています、そして私はそれらがRubyにも存在していると思います。例を挙げましょう。おそらくfor、この場合の使用法を理解するのに役立ちます。

(map <some function to map a value> 
  (filter <some function to return true OR false to filter values>
          <a sequence of values>))

上記のコードは、を使用して値のシーケンスに対してフィルタリングを実行し、関数filterを使用してフィルタリングされたシーケンスの各値を他の値にマップしmapます。

for基本的に、以下に示すのと同じことができます

(for [index <a sequence of values> 
     :when <some expression to return true OR false by check index value>]
     (<some expression to map a value i.e transform index to something else>))

map上記の例で、とfilterコードを次のように表現する方法をマッピングできるようになることを願っています。for

于 2012-10-16T14:50:09.900 に答える
1

その説明は役に立ち、Clojureに没頭して数日後、私はその言語にずっと慣れました。確実に理解するために、これら2つのテストについて説明します。

"And also filtering"
(= '(1 3 5 7 9)
  (filter odd? (range 10))
  (for [index (range 10) :when (odd? index)]
    index))

'(1 3 5 7 9)は、0から9までのすべての奇数のリストです。に対してチェックされたときにtrueと評価される
(filter odd? (range 10))コレクションからのすべてのアイテムのリストを返します。戻り値は最初のリストと同じです。基本的にはforループです。それは反復的です。0から9までのすべての数値を変数にバインドしてから、正しい値を返しますか?したがって、奇数である条件を追加します。戻り値は最初の2つと同じです。(range 10)odd?
(for)(for [index (range 10)] index)indexindex(for [index __ :when (odd? index)] index))index

あれは正しいですか?

"And they trivially allow combinations of the two transformations"
(= '(1 9 25 49 81)
  (map (fn [index] (* index index))
    (filter odd? (range 10)))
  (for [index (range 10) :when (odd? index)]
    (* index index)))

ここで、map関数は関数を取ります。この無名関数は引数を取り、その引数をそれ自体で乗算します。map渡されるコレクション内の各要素にこの関数を適用します。そのコレクションは、0から9までの奇数です。

forは、0から9までの各数値をindex奇数の場合に変数に設定し、これらの数値のそれぞれを2乗したレイジーシーケンスを返します。

その説明は正しいですか?

于 2012-10-17T16:13:28.877 に答える
0

仕組みを理解してforいますか?Clojure APIドキュメントでそれについて読んだことがありますか?の使用方法を知っている場合はfor、これら2つの問題の解決策に「到達」するために何もする必要はありません。彼らは自明です。

これらの問題の目的は、どのように機能するかを推測することですfor。彼らがあなたがそれをするのを助けていないのなら、あなたがその主題について読んだほうがよいでしょう。に関する情報を調べてもfor理解しにくい場合は、この質問を編集して、何が混乱しているのかを正確に特定してください。私(または他の人)が説明を試みることができます。

于 2012-10-16T14:34:28.197 に答える