Динамически выяснить, сколько входов имеет функция, Racket - PullRequest
6 голосов
/ 08 сентября 2011

Есть ли способ узнать во время выполнения, сколько входов (аргументов, параметров) имеет функция?

Скажи, я хочу:

(define (my-function unknown-function)
  ...
  (number-of-necessary-arguments unknown-function)
  ...)

1 Ответ

11 голосов
/ 08 сентября 2011

Вы можете использовать procedure-arity.

(procedure-arity expt)                     ; => 2

Обратите внимание, что при использовании procedure-arity с переменными функциями или case-lambda и т. П. Результаты более сложны:

(procedure-arity apply)                    ; => (arity-at-least 2)
(procedure-arity (case-lambda
                  ((x) x)
                  ((x y z) z)
                  ((a b c d e f . g) g)))  ; => `(1 3 ,(arity-at-least 6))
...