chibi schemeの低レベルマクロ

Chibiは低レベルマクロの使い方が分からないので割愛。

Chibi schemeはsyntactic closure族なので(nmoshと同じような)explicit renamingが使える。

(import (chibi) (srfi 1))
(define-syntax apply-x-values
  (er-macro-transformer
    (lambda (x rename _)
      (let ((lyst (rename 'list))
            (count (cadr x)))
        (cons lyst (iota count))))))
(display (apply-x-values 100000))

variableとして使わないデータ等はそのまま返せばOK。一般的には、マクロに渡されるrename手続きにシンボルを渡して、"文脈上の"名前を拾って返す。
ちなみに、chibi schemeの場合、listはライブラリに配置されたシンボルでないので、renameする必要も実は無い。

(define-syntax apply-x-values
  (er-macro-transformer
    (lambda (x rename _)
      (let ((count (cadr x)))
        (cons 'list (iota count))))))

これでも動く。
Chibi schemeはlistの定義の割り切りぶりがすごい。

(define (list . args) args)

まぁ確かにコレでlistだ。。