모든 아름다운 답변에 대해 감사드립니다. 하나로서 올바른정신적으로 읽는 법 Lisp/Clojure 코드
주 표시 할 수 없습니다 : 나는 함수형 프로그래밍에 새로운 오전
이미 위키 나는 예를 들면위한 함수 프로그래밍의 간단한 기능을 읽을 수있는 반면 숫자의 계승을 계산할 때, 큰 기능을 읽는 것이 어렵다는 것을 알고 있습니다. 이유 중 일부는 함수 정의 내에서 더 작은 코드 블록을 파악할 수 없다는 것과 내적으로 코드에서 ()
과 일치시키기가 어려워 졌기 때문이라고 생각합니다.
누군가 코드를 읽으면서 나를 걸을 수 있고 코드를 신속하게 해독 할 수있는 방법에 대한 팁을 줄 수 있다면 좋을 것입니다.
참고 :이 코드를 10 분 동안 보았을 때이 코드를 이해할 수 있지만이 코드가 Java로 작성된 것인지 의심 스럽지만 10 분이 걸립니다. 그래서 나는 Lisp 스타일의 코드가 편안하다고 생각한다. 더 빨리해야한다.
Note : 나는 주관적인 질문이다. 그리고 나는 정당하게 정확한 답을 찾는 것이 아닙니다. 그냥이 코드를 읽기에 대해 이동하는 방법에 대한 의견, 환영과
(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에 대한 주요 불만 중 하나는 읽기가 어렵다는 점입니다. 따라서 직관적으로 이해하기가 쉽지 않을 것입니다. –
이것은 쉬운 기능이 아닙니다. 10 분 후에 완전히 이해할 수 있다면 괜찮습니다. –