2010/11/27

syntax-rules: define-same-params

(define-same-params (idx edge)
  (index->x (remainder idx edge))
  (index->y (quotient idx edge))
  (index->xy (values (index->x idx edge)
                     (index->y idx edge)))
  (hline-indices (vector-iota edge (* (index->y idx edge) edge))))

小手先の誤魔化しのような気もしますが。

(define-syntax define-same-params
  (syntax-rules ()
    ((_ (params ...)(name body ...))
     (define (name params ...)
       body ...))
    ((_ (params ...)(name body ...) x ...)
     (begin
       (define-same-params (params ...)(name body ...))
       (define-same-params (params ...) x ...)
       (undefined)))))

追記

@valvallow R6RSならこれでいける(define-syntax define-same-params(syntax-rules()((_(p ...)(n b ...)...)(begin(define(n p ...)b ...)...)))) R5RSの微妙な不備
(define-syntax define-same-params
  (syntax-rules ()
    ((_ (p ...)(n b ...) ...)
     (begin
       (define (n p ...) b ...) ...))))

R6RS 。。

Scheme手習い

0 件のコメント:

コメントを投稿