Схема PLT: преобразование одного из макросов в «Приведение SPEL в LISP» - PullRequest
2 голосов
/ 12 января 2010
    (defspel game-action (command subj obj place &rest rest)
  `(defspel ,command (subject object)
     `(cond ((and (eq *location* ',',place)
                  (eq ',subject ',',subj)
                  (eq ',object ',',obj)
                  (have ',',subj))
             ,@',rest)
            (t '(i cant ,',command like that.)))))

То есть код из http://www.lisperati.com/actions.html для «макроса, определяющего макрос». Я не могу преобразовать это соответствующим образом в схему. Может кто-нибудь объяснить мне процесс создания такого же рода вещи в Схеме?

1 Ответ

4 голосов
/ 12 января 2010

Этот тип макроса на самом деле намного проще в Схеме, поскольку вы можете сделать все это с помощью define-syntax-rule (в стандартном коде Схемы вам понадобится define-syntax + syntax-rules). Вы в основном делаете то же самое, за исключением всего беспорядка цитата / кавычка.

(defspel (game-action command subj obj place rest ...)
  (defspel (command subject object)
    (cond [(and (eq? *location* 'place)
                (eq? 'subject 'subj)
                (eq? 'object 'obj)
                (have 'subj))
           rest ...]
          [else '(i cant command like that.)])))

И поскольку это на самом деле большая часть кода, я перенес все это на PLT - см. запись в списке рассылки.

...