(use gauche.generator) (define (restrict-arity proc n) (let ((argument-list (generator->list gensym n))) ((eval `(lambda (p) (lambda ,argument-list (p ,@argument-list))) (find-module 'gauche)) proc))) (define (foo . p) "foo") ; 可変長の手続き (define bar (restrict-arity foo 3)) ; アリティを制限 (bar 1 2 3) ; これは OK (bar 1 2 3 4) ; これは NG#