我正在学习Clojure使用教程并遇到像4clojure和99个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书.它是由两位了解原始创作者旁边最好的语言的人写的.他们解释你可以做什么,你应该怎么做,然后是为什么.我不认为这是关于该语言的良好的第一本书/学习经验,但是我认为这是您从基础开始学习所需的第二本书.