非常感谢所有美丽的答案!无法仅将其中一个标记为正确
注意:已经是Wiki
我是函数编程的新手,虽然我可以阅读函数式编程中的简单函数,例如,计算数字的阶乘,但我发现很难阅读大函数。部分原因是因为我无法找出函数定义中较小的代码块,部分原因是因为我很难( )
在代码中进行匹配。
如果有人可以引导我阅读一些代码并提供一些有关如何快速解密某些代码的提示,那将是很好的。
注意:如果我盯着它看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))))