我正在试图弄清楚如何在Scheme中设置默认或可选参数。
我已尝试(define (func a #!optional b) (+ a b))
,但我找不到检查b
是否为默认参数的方法,因为只需调用(func 1 2)
就会出错:
Error: +: number required, but got #("halt") [func, +]
我也试过(define (func a [b 0]) (+ a b))
,但我收到以下错误:
Error: execute: unbound symbol: "b" [func]
如果有帮助我使用BiwaScheme
中使用的repl.it答案 0 :(得分:2)
这在Racket中运行良好:
(define (func a (b 0)) ; same as [b 0]
(+ a b))
例如:
(func 4)
=> 4
(func 3 2)
=> 5
...但它不是标准语法,它取决于使用的Scheme解释器。有处理可变数量参数的语法,它可以用来处理带有默认值的可选参数,但它不会看起来很漂亮:
(define (func a . b)
(+ a (if (null? b) 0 (car b))))
它是如何工作的? b
是参数的列表。如果它为空,则使用零,否则使用第一个元素的值。
答案 1 :(得分:1)
检查您的Scheme实施是否支持SRFI 89: Optional positional and named parameters。
答案 2 :(得分:0)
为此目的的MIT / GNU方案doc。
(define (f a #!optional b)
(+ a
(if (default-object? b)
0
b)))
; test
(f 1) ; 1
(f 1 2) ; 3