2012-02-01 2 views
2

LISP 매크로 매개 변수의 구조가 잘못되었다는 것을 이해합니다. 나는 그것이 필수적인지다는 것을 생각해보고있다. 파라미터 (들)의 적절한 형태를 확인하는 것을 제외 - 예로서,매크로 매개 변수의 구조가 "정말로 필요합니까?"

(defmacro m1 (a) (car a)) 

(defmacro m2 ((a1 a2)) a1) 

는 (대략) 동등한 것으로 보인다.

내 생각에 비 구조적으로 코드를 작성/이해하기가 쉽지만, 코드를 사용하는 코드는 그렇지 않은 코드로 변환 될 수 있습니다. 내가 옳은가, 아니면 어리석은 초보자의 실수인가?

답변

4

필수 사항은 아닙니다. 매크로 호출이 Lisp 시스템에 의해 파괴되도록하거나 매크로 내부에 매크로 호출을 작성할 수 있습니다.

구조 코드를 작성하려면 일반적으로 & 휴식 또는 & 본문 매개 변수 목록과 결합해야합니다. 한 가지 일반적인 이유는 매크로 람다 목록의 구문 가능성이 특정 목적을 위해 충분히 유연하지 않기 때문입니다. 그 예는 Common Lisp LOOP 매크로입니다.

매크로 람다 목록을 사용하는 것이 좋습니다. 매개 변수 및 일부 구조 정보가있는 인터페이스를 제공합니다. 이것은 또한 Lisp 시스템이 매크로 호출의 구문 오류 검사의 간단한 형태를 제공 할 수있게한다. 뭔가 손으로 써야 할 것입니다.

+0

감사합니다. 이것은 정확히 내가 예상 한 것입니다. 확실히하고 싶었습니다. – mbork