非常感谢所有美丽的答案!不能标记只有一个是正确的如何阅读心理Lisp/Clojure代码
注:已经
我是新来的函数式编程和维基,而我可以读函数式编程简单功能,例如计算一个数的阶乘,我发现很难读大函数。 部分原因是我认为是因为我无法弄清函数定义中的小块代码,还有一部分原因是我在代码中难以匹配()
。
如果有人能够通过阅读一些代码,并给我一些关于如何快速解密某些代码的提示,那将是非常棒的。
注意:如果我盯着它10分钟,我可以理解这段代码,但我怀疑这个代码是否用Java编写,需要10分钟。所以,我觉得在Lisp风格的代码中感觉很舒服,我必须更快地做到这一点
注:我知道这是一个主观的问题。我在这里并没有寻求任何可以证实的正确答案。只是你如何去阅读此代码的注释,将受到欢迎和高度有益
(defn concat
([] (lazy-seq nil))
([x] (lazy-seq x))
([x y]
(lazy-seq
(let [s (seq x)]
(if s
(if (chunked-seq? s)
(chunk-cons (chunk-first s) (concat (chunk-rest s) y))
(cons (first s) (concat (rest s) y)))
y))))
([x y & zs]
(let [cat (fn cat [xys zs]
(lazy-seq
(let [xys (seq xys)]
(if xys
(if (chunked-seq? xys)
(chunk-cons (chunk-first xys)
(cat (chunk-rest xys) zs))
(cons (first xys) (cat (rest xys) zs)))
(when zs
(cat (first zs) (next zs)))))))]
(cat (concat x y) zs))))
体验?你习惯于阅读Lisp代码会更快。然而,关于Lisp的主要抱怨之一是很难阅读,所以不要期望它很快变得直观。 – 2009-12-12 18:39:57
这不是一个简单的功能。如果10分钟后你能完全理解它,那就很好。 – 2009-12-12 22:57:58