Динамически выяснить, сколько входов имеет функция, ракетка
Вопрос
Есть ли способ узнать во время выполнения, сколько входов (аргументов, параметров) функция имеет функция?
Скажи, я хочу:
(define (my-function unknown-function)
...
(number-of-necessary-arguments unknown-function)
...)
Решение
Вы можете использовать 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))
Не связан с StackOverflow