5 scheme
我正在尝试在 Scheme 中使用时,但我不知道为什么我的列表的最后一个元素出现 .#void>。
这是我的代码
(define (genlist x y)
(when
(< x y)
(cons x (genlist (+ x 1) y))))
Run Code Online (Sandbox Code Playgroud)
这是我的输出 =>
(2 3 4 5 6 7 8 9 . #void>)
Run Code Online (Sandbox Code Playgroud)
当我们when需要编写一个if没有else部分的表达式时,和/或当我们需要在if. 仅返回最后一个表达式的值,因此我们主要将其用于副作用。为了更好地理解它,在 Racket 中:
(when <condition>
<exp1>
<exp2>
<exp3>)
Run Code Online (Sandbox Code Playgroud)
相当于这样:
(if <condition>
(begin
<exp1>
<exp2>
<exp3>)
(void)) ; implementation-dependent
Run Code Online (Sandbox Code Playgroud)
同样的注意事项也适用于unless,只不过条件被 包围起来(not ...)。
你的问题的根源(以及为什么有一个if没有 an 的代码味道的原因else)是你的代码没有处理当 时的情况(>= x y)。问问自己,在这种情况下你应该做什么?很简单,返回一个空列表!这是代码中缺少的递归的基本情况。