Действительно ли необходима деструктуризация макропараметров? - PullRequest
2 голосов
/ 01 февраля 2012

Я понимаю, что деструктуризация в макропараметрах LISP - это хорошая вещь;Мне интересно, является ли это необходимым .Например,

(defmacro m1 (a) (car a))

и

(defmacro m2 ((a1 a2)) a1)

кажутся (примерно) эквивалентными - за исключением проверки правильной формы параметра (ов).

Я предполагаю, что деструктуризация делает код более простым для написания / понимания, но любой код, использующий его, может быть переведен в код, который этого не делает.Я прав или это глупая ошибка новичка?

1 Ответ

4 голосов
/ 01 февраля 2012

Это не существенно. Вы можете либо разрешить деструктуризацию вызова макроса системой Lisp, либо написать собственный код для этого внутри макроса.

Если вы пишете свой собственный код деструктуризации, вы обычно комбинируете его со списком параметров & rest или & body. Одной из обычных причин этого также является то, что синтаксические возможности макро-лямбда-списка недостаточно гибки для определенной цели. Примером этого может быть макрос LISP Common Lisp.

Это хороший стиль - использовать макрос лямбда-лист. Он предоставляет интерфейс с параметрами и некоторой структурной информацией. Это также позволяет системе Lisp предоставлять простую форму синтаксической проверки ошибок при вызовах макросов. Что-то, что нужно было бы написать от руки.

...