非常感谢所有漂亮的回答! 不能只标记一个正确
注意: 已经是维基百科了
我是函数式编程的新手,虽然我能读懂函数式编程中的简单函数,例如计算一个数的阶乘,但我发现很难读懂大函数。
部分原因是因为我无法在函数定义中找出更小的代码块,还有一部分原因是因为在代码中匹配 ( )
变得越来越困难。
如果有人能指导我阅读一些代码,并给我一些如何快速破译一些代码的提示,那就太好了。
注意: 如果我盯着它看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))))