如何自己学习Clojure方式?

Pau*_*Lam 5 idioms clojure

我正在学习Clojure使用教程并遇到像4clojure99个lisp问题这样的问题.我解决问题很好,但我的代码似乎总是像下面的例子一样混乱.

对于像Clojure一样灵活的语言,初学者如何在不让其他人一直牵着的情况下学习惯用的方法?

我的烂摊子的一个例子:

(defn intersectall [lset] 
  (when-not (empty? (first lset))
    (if (reduce #(and %1 %2) (map #(stars/member* (front lset) %) (rest lset)))
        (cons (front lset) (intersectall (cons (rest (first lset)) (rest lset))))
        (intersectall (cons (rest (first lset)) (rest lset))))))
Run Code Online (Sandbox Code Playgroud)

如果您想知道,该函数intersectall只返回所有输入子列表中的公共元素列表.

因此对于:

(def lset '((6 :pears :and)
        (3 :peaches :and 6 :peppers)
            (8 :pears :and 6 :plums)
        (:and 6 :prunes :with some :apples)))

=> (intersectall lset)
(6 :and)
Run Code Online (Sandbox Code Playgroud)

这个问题来自The Little Schemer第117页.

Run*_*ult 12

如果你真的想要获得Clojure,我强烈推荐The Clojure书.它是由两位了解原始创作者旁边最好的语言的人写的.他们解释你可以做什么,你应该怎么做,然后是为什么.我不认为这是关于该语言的良好的第一本书/学习经验,但是我认为这是您从基础开始学习所需的第二本书.

  • 抱歉,我不清楚.我的意思是,在你读了JoC作为你的第二本书之后,你应该再次阅读它作为你的第三本书. (4认同)