Динамически выяснить, сколько входов имеет функция, ракетка

StackOverflow https://stackoverflow.com/questions/7342136

  •  27-10-2019
  •  | 
  •  

Вопрос

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

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

(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))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top