Cảm ơn rất nhiều cho tất cả các câu trả lời tuyệt vời! Không thể chỉ đánh dấu một là đúng
Lưu ý: Đã là wiki
Tôi chưa quen với lập trình hàm và trong khi tôi có thể đọc các hàm đơn giản trong lập trình Hàm, chẳng hạn như tính giai thừa của một số, tôi thấy khó đọc các hàm lớn. Một phần lý do là tôi nghĩ vì tôi không có khả năng tìm ra các khối mã nhỏ hơn trong một định nghĩa hàm và một phần nữa là vì tôi đang trở nên khó khớp ( )
trong mã.
Sẽ thật tuyệt nếu ai đó có thể hướng dẫn tôi đọc một số mã và cho tôi một số mẹo về cách nhanh chóng giải mã một số mã.
Lưu ý: Tôi có thể hiểu mã này nếu tôi nhìn chằm chằm vào nó trong 10 phút, nhưng tôi nghi ngờ nếu cùng một mã này được viết bằng Java, tôi sẽ mất 10 phút. Vì vậy, tôi nghĩ để cảm thấy thoải mái với mã kiểu Lisp, tôi phải làm điều đó nhanh hơn
Lưu ý: Tôi biết đây là một câu hỏi chủ quan. Và tôi không tìm kiếm bất kỳ câu trả lời chính xác nào ở đây. Chỉ nhận xét về cách bạn đọc mã này, sẽ được hoan nghênh và rất hữu ích
(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))))