Gauche > Archives > 2024/09/05

2024/09/05 02:42:00 UTC齊藤
#
(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
#
こんな感じかな?
2024/09/05 03:46:11 UTCshiro
#
ああ、確かにそのevalの使い方は安全ではありますね。でもevalかあ…