09/08/08 14:55:08
R6RS でも書いてみた。
(import (rnrs)
(only (srfi :1) take list-index filter-map)
(only (srfi :26) cut))
(define-syntax curry
(lambda(x)
(define (e a)
(define s '(<1> <2> <3> <4> <5> <6> <7> <8> <9>))
(take s (+ 1 (apply max -1
(filter-map
(lambda(p)(list-index (cut eq? p <>) s))
(syntax->datum a))))))
(syntax-case x ()
((k t a ...)
(with-syntax
(((p ...) (datum->syntax #'k (e #'(a ...)))))
#`(lambda (p ... . r)
#,(syntax-case #'(a ...) (<...>)
((a ... <...>) #'(apply t a ... r))
(_ #'(t a ...)))))))))