Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / научите в defmacro + defun / 2 сообщений из 2, страница 1 из 1
25.08.2016, 21:34
    #39298237
MrCat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
научите в defmacro + defun
Тут дядька про CLOS рассказывает и предлагаетExercise: Write a macro defclass-plus which expands into a defclass plus some or all of the following, in the spirit of defstruct: constructor, predicate, accessors and copier. Написал так:
Код: plaintext
1.
2.
3.
4.
5.
;; это заготовка для основного макроса
(defmacro defclass-plus (name slots &key parent add-constructor add-predicate) ;;; + прочие add-...
  `(defclass ,name ( ,parent ) ,slots)
  (if (add-constructor)
    (defclass-plus-constructor name)))
Стал писать вложенный макрос и залип:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
(defmacro defclass-plus-constructor (name) 
  "internal macro for class constructor"
  (with-gensyms (constructor-name)
	(let ((constructor-name (format nil "make-instance-~d" name)))
      `(defun ,constructor-name ( ) 
         (make-instance ,name)))))

;; ради проверки запускаем 
(macroexpand-1 '(defclass-plus-constructor kissa))

;; на что получаем ужасное
> (DEFUN "make-instance-KISSA" NIL (MAKE-INSTANCE KISSA))
Вместо строки тут или должен быть символ, или строка без кавычек, что тут нужно вставить вместо format? Второй вопрос: чем экранировать скобки внутри backquoted expression?
...
Рейтинг: 0 / 0
02.10.2016, 13:22
    #39319219
budden
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
научите в defmacro + defun
MrCat,

не (format nil "make-instance-~d" name), а (intern (format ...)).

> Второй вопрос: чем экранировать скобки внутри backquoted expression?
Смотри в сторону @, , если я правильно понял твой вопрос.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / научите в defmacro + defun / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]