Ich habe vor kurzem begonnen, ChickenScheme zu verwenden, und jetzt möchte ich eine Funktion mit Standardargument deklarieren (falls nicht angegeben). Ich fand dieses Beispiel auf der Racket-Seite, ich weiß, Racket und ChickenScheme sind unterschiedlich, aber ich dachte, dass diese grundlegenden Dinge die gleichen waren. DieseStandardargument in Schema Lambda-Funktion?
(define greet
(lambda (given [surname "Smith"])
(string-append "Hello, " given " " surname)))
ist der Fehler aus dem ChickenScheme Interpreter:
Error: during expansion of (lambda ...) - in `lambda' - lambda-list expected: (lambda (given (surname "Smith")) (string-append "Hello, " given " " surname))
Call history:
<syntax> (define greet (lambda (given (surname "Smith")) (string-append "Hello, " given " " surname)))
<syntax> (##core#set! greet (lambda (given (surname "Smith")) (string-append "Hello, " given " " surname)))
<syntax> (lambda (given (surname "Smith")) (string-append "Hello, " given " " surname)) <--
Es ist nicht "Standard" im Sinne von nicht in RNR angegeben werden, aber es ist tatsächlich kompatibel mit [SRFI 89] (http: // Srfl. schemers.org/srfi-89/srfi-89.html), das ist Standard genug für meinen Geschmack, und in jedem Fall mehr Standard als, sagen wir, Guile-Stil für optionale Argumente (die teilweise auf DSSSL-Syntax für optionale Argumente basiert, wie in sjamaans Antwort erwähnt). –