매크로 (스칼라 모르는) 리스프에서 사용되는 세 가지 주요 목적이 있습니다
- 정의 : 뭔가 만들어 직접 해당 장소에 등록되어가. 예 :
defun
, defgeneric
, defclass
(표준), deftable
(포스트 모더니즘에서).
Unwind-protect
래퍼 : 상태가 일시적으로 수정되고 작업 완료 후 수정되도록 보장됩니다. 이것은 반복적으로 쓰는 것이 번거로울 수 있으므로 우리는 속기를 만듭니다. 예 : with-open-file
(표준), with-transaction
(많은 데이터베이스 라이브러리).
- 다른 언어의 생성 : 예 : CL-WHO (HTML), Parenscript (JavaScript). Lisp 형식으로 다른 언어의 코드를 생성함으로써, 다른 언어의 코드를 지원하지 않더라도 매크로를 사용할 수 있습니다.
구체 예 :
try (SomeClosable foo = openFoo()) {
foo.doSomething();
}
자바 6 만 대략 다음과 같이 표현 될 수있다 :
SomeClosable foo;
try {
foo = openFoo();
foo.doSomething();
} finally {
if (foo != null && foo.isOpen()) {
foo.close();
}
}
자바 7
try
-blocks에
Closable
(S)의 폐쇄를 보장하기위한 약식 소개
Java 개발자는 언어 설계자가이 기능을 구현할 때까지 기다려야했습니다. 그는
(with-open-foo (f :bar baz)
(do-some-foo f)
(and-something-else))
대신
(let ((f (open-foo :bar baz)))
(unwind-protect
(progn
(do-some-foo f)
(and-something-else))
(when f (close f))))
쓸 수 있도록 http://stackoverflow.com/questions/267862/what-makes
: 리스프 개발자는 약간의 매크로를 사용 -lisp-macros-so-special? s = 6 | 1.8097 http://stackoverflow.com/questions/5833033/in-lisp-code-is-data-what-benefit-does-that-provide/5833388?s = 11 | 1.6415 # 5833388 –
http : //stackoverflow.c의 중복 om/questions/2561221/examples-of-what-lisps-macro-use-for-s = 7 | 4.5505 –