`# '(lambda…`와`(lambda…`) 사이에 차이가 있나요? [duplicate]
Dec 14 2020
에서 실제 커먼 리스프 의 예가 REMOVE-IF-NOT
람다와 함께 :
CL-USER> (remove-if-not #'(lambda (x) (evenp x)) '(1 2 3 4 5))
(2 4)
다음과 다른가요?
CL-USER> (remove-if-not (lambda (x) (evenp x)) '(1 2 3 4 5))
(2 4)
A는 (lambda..)
인용 기능 양식에 동행 값은 #'(..)
? REPL에서는 그렇게 보이지만 Lisp를 처음 접했기 때문에 무언가를 간과 할 수 있습니다.
답변
4 tfb Dec 14 2020 at 19:03
이 두 가지는 예상대로 동일합니다.
#'
읽기 매크로이며,#'x
로 읽(function x)
. 그래서#'(lambda (...) ...)
으로 읽습니다 . CL에서 인수가 함수를 나타내는 특수 연산자는(function (lambda (...) ...))
어디에 있습니까function
?lambda
확장 : 매크로로 정의되고(lambda (...) ...)
, IS(function (lambda (...) ...)
: 이전에 동일한 형태.
이는 #'(lambda (...) ...)
, (lambda (...) ...)
및 (function (lambda (...) ...))
모두 CL에서 동일 함을 의미합니다 . 모두 (lambda (...) ...)
현재 어휘 환경에 지정된 함수를 나타냅니다 .
사람들이 여전히 #'(lambda (...) ...)
버전을 사용하는 데에는 두 가지 이유가 있습니다 .
- 일관성 – 예를 들어 함수 인
#'foo
경우 필요foo
하므로lambda
사례에도 사용하는 것이 더 일관성있는 것으로 보일 수 있습니다 . lambda
현재 매크로 정의가있는 CL의 경우가 항상있는 것은 아니므로 원본 CL 사양과 ANSI 표준 사이에 작성되었거나 당시를 기억하는 사람들이 작성한 코드는#'
양식을 사용할 수 있습니다 .