Frage

Gibt es eine Möglichkeit, zur Laufzeit herauszufinden, wie viele Eingaben (Argumente, Parameter) eine Funktion hat?

Sagen Sie, ich möchte:

(define (my-function unknown-function)
  ...
  (number-of-necessary-arguments unknown-function)
  ...)
War es hilfreich?

Lösung

Sie können verwenden procedure-arity.

(procedure-arity expt)                     ; => 2

Beachten Sie das, wenn Sie verwendet werden procedure-arity mit variadischen Funktionen oder case-lambda oder dergleichen, die Ergebnisse sind komplizierter:

(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))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top