Hier ist eine Funktion, die ich schrieb, die eine Zahlliste basierend auf einem Startwert, Endwert und einer nächsten Funktion generieren wird.Optionales Funktionsargument mit Standardwert in Common Lisp
(defun gen-nlist (start end &optional (next #'(lambda (x) (+ x 1))))
(labels ((gen (val lst)
(if (> val end)
lst
(cons val (gen (next val) lst)))))
(gen start '())))
jedoch, wenn es in die SBCL repl Eingabe ich die folgenden Warnungen erhalten:
; in: DEFUN GEN-NLIST
; (SB-INT:NAMED-LAMBDA GEN-NLIST
; (START END &OPTIONAL (NEXT #'(LAMBDA (X) (+ X 1))))
; (BLOCK GEN-NLIST
; (LABELS ((GEN #
; #))
; (GEN START 'NIL))))
;
; caught STYLE-WARNING:
; The variable NEXT is defined but never used.
; (NEXT VAL)
;
; caught STYLE-WARNING:
; undefined function: NEXT
;
; compilation unit finished
; Undefined function:
; NEXT
; caught 2 STYLE-WARNING conditions
Irgendwie hat es die Variable siehe nächste definiert ist, aber nicht verwendet. Und wo ich es verwende, wie in (next val)
, ist es eine undefinierte Funktion ?!
Klar mache ich hier etwas falsch. Ich kann einfach nicht herausfinden, was oder wie. Ist das die korrekte Art, optionale Funktionsargumente mit Standardwerten anzugeben?
Wenn Sie eine/die Lösung bekannt geben möchten, sollten Sie es schreiben * als Antwort *. Nicht als Bearbeitung in die Frage aufnehmen. Fragen sind für Fragen. Antworten sind für Antworten. –
Sinn macht. Geändert. –