Vielen Dank für all die schönen Antworten! Kann nicht nur einen als korrekt markieren
Hinweis: Bereits ein Wiki
Ich bin neu in der funktionalen Programmierung und obwohl ich einfache Funktionen in der funktionalen Programmierung lesen kann, z. B. um die Fakultät einer Zahl zu berechnen, fällt es mir schwer, große Funktionen zu lesen. Ein Grund dafür ist, dass ich nicht in der Lage bin, die kleineren Codeblöcke innerhalb einer Funktionsdefinition herauszufinden, und zum Teil, weil es für mich immer schwieriger wird, ( )
im Code übereinzustimmen.
Es wäre großartig, wenn mich jemand durch das Lesen eines Codes führen und mir einige Tipps geben könnte, wie man einen Code schnell entschlüsselt.
Hinweis: Ich kann diesen Code verstehen, wenn ich ihn 10 Minuten lang anstarre, aber ich bezweifle, dass derselbe Code, der in Java geschrieben wurde, 10 Minuten dauern würde. Ich denke, um mich im Lisp-Code wohl zu fühlen, muss ich es schneller machen
Hinweis: Ich weiß, dass dies eine subjektive Frage ist. Und ich suche hier keine nachweislich richtige Antwort. Nur Kommentare dazu, wie Sie diesen Code lesen, wären willkommen und sehr hilfreich
(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))))