이 함수 빌더는 P.Graham의 "ANSI Common Lisp"(110 페이지)에서 컴포지션을 구현합니다. 인수는 n> 0 인용 된 함수 이름입니다. 나는 완전히 이해하지 못하는, 그래서 그 아래 내 질문을 여기에 코드를 인용하고 지정할 수 있습니다 :(compose) in Common Lisp
(defun compose (&rest fns)
(destructuring-bind (fn1 . rest) (reverse fns)
#'(lambda (&rest args)
(reduce #'(lambda (v f) (funcall f v))
rest
:initial-value (apply fn1 args)))))
구성하는 인수 목록은 반전과 (지금 첫번째) 요소을 Fn1 '에 바인딩, 압축 해제된다 '나머지는'쉬다 '. 가장 바깥 쪽의 람다 본문은 reduce : (funcall fi (funcall fi-1 ...))이며 피연산자는 역순으로 복원되어 초기 값으로 복원됩니다.
1) 가장 바깥 쪽 람다 식의 역할은 무엇입니까? 즉, 'args'는 어디에서 가져 옵니까? destructuring-bind의 첫 번째 인수로 지정된 데이터 구조입니까? 2) 가장 안쪽의 람다는 두 개의 인수를 어디에서 가져 옵니까?
나는 코드가하는 일을 이해할 수 있지만 어휘 범위는 나에게 약간의 수수께끼이다. 앞으로 모든 의견을 기다리십시오! 미리 감사드립니다. // Marco
가 될 수 있을까? – Marcin
사과드립니다.이 문제에 대한 토론은 http://stackoverflow.com/questions/5928106/compose-example-in-paul-grahams-ansi-common-lisp – ocramz
@Marcin에서 눈을 뗄 수 없습니다.) 나쁜 습관입니까? 나는 아직도 멍청이야 – ocramz