Как написать макрос, который получает любое количество аргументов и распечатывает их? - PullRequest
2 голосов
/ 03 сентября 2011
(define-syntax prnt 
  (syntax-rules ()
               [(prnt elem ...) (display (format "~a" elem ...))]
               ))

Приведенный выше код, запущенный в ракетке, выдаст следующую ошибку:

формат: форматирование строки требует 1 аргумента, учитывая 3; аргументы были: "~ a" "1" 2 3

тогда как мне добиться, чтобы при использовании (prnt "1" 2 3) он мог печатать любую вещь, следующую за prnt?

1 Ответ

2 голосов
/ 03 сентября 2011

Если вы действительно хотите макрос:

(define-syntax prnt 
  (syntax-rules ()
    [(prnt elem ...)
     (begin (displayln elem) ...)]))

Вам не нужен макрос, если все, что вам нужно, это возможность отображать несколько объектов одним вызовом функции, хотя:

(define (prnt . args)
  (for-each displayln args))
...