私はClojureを習得しようとしていますので、オイラーのプロジェクトの課題を解決するには良い方法があると思いました。最初の課題は、3または5で割り切れる1000以下の数を合計することです。Clojure:フィルタはどのようにロジックと相互作用しますか?
私の元のコードはでした:
(defn div3 [input-no] (zero? (mod input-no 3)))
(defn div5 [input-no] (zero? (mod input-no 5)))
(reduce + (filter (or div3 div5) (range 1 1000)))
しかし、それは動作しませんでした、そしてそれはフィルタがちょうど5
で割り切れるものを3で割り切れる数のリストを返し、ないだろうと判明コードを次のように変更しました:
(defn div3or5 [input-no] (or (div3 input-no) (div5 input-no)))
(reduce + (filter div3or5 (range 1 1000)))
正しい結果が得られましたが、元のコードが機能しなかった理由はわかりません。
誰もがこれにいくつかの光を当てることができますか?
Clojureを学ぶ別の方法は、あなたが別の言語で行うプロジェクトを見つけることです。私にとってはCやr Pythonで実装されていて、Clojureに書きます。私にとっては、.csv入力を受け取り、.csv入力データからHTTPリクエストを作成して送信し、結果を取得し、それに基づいて別の.csvファイルを書き出していました。 – octopusgrabbus
Clojure http://www.4clojure.com/(意図していないことは意図していません)は良いですが、Webインターフェイスはとても簡単です! – huon
これはちょうど間違いだった(これは大丈夫です - 批判は意図されていません)か、あなたが入力した内容が意味をなさない言語があるかどうか不思議です。他の場所でその行動を見るので、述語を組み合わせることを期待していましたか?もしそうなら、どこ?ありがとう... –