Недавно я начал использовать ChickenScheme, и теперь я хочу объявить функцию с аргументом по умолчанию (если не указано). Я нашел этот пример на сайте Racket, я знаю, что Racket и ChickenScheme разные, но я думал, что эти основные вещи были одинаковыми.По умолчанию аргумент в схеме лямбда-функции?
(define greet
(lambda (given [surname "Smith"])
(string-append "Hello, " given " " surname)))
Это ошибка от переводчика ChickenScheme:
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)) <--
Это не «стандарт» в том смысле, чтобы не быть указаны в RnRS, но на самом деле это совместимо с [SRFI 89] (Http: // SRFI. schemers.org/srfi-89/srfi-89.html), который является достаточно стандартным для моего вкуса и в любом случае более стандартным, чем, скажем, стиль Guile для необязательных аргументов (который частично основан на синтаксисе DSSSL для необязательных аргументов, как упоминалось в ответе Сямаана). –