我正在学习Scheme,我无法弄清楚我在这段代码中做错了什么:
(define (distance a b)
(define c 1)
(define loop
(lambda (a b c)
((if (<= c b)
(begin
(display (c (* a c)))
(newline)
(apply loop '(a b (+ c 1))))
'done)))))
我正在尝试创建一个速度和小时的程序,然后在单独的一行显示每小时的行进距离。当我在解释器中运行代码时,我得到一个空体错误:
宏扩展期间出错:空体#f
我正在使用Larceny解释器运行代码。
我重写了代码,从距离函数的主体调用内部函数循环,代码完美无缺。更新的代码:
(define (distance a b)
(define c 1)
(define (loop x y z)
(if (<= z y)
(begin
(display "Hour: ")
(display z)
(display " Speed: ")
(display x)
(display " Distance: ")
(display (* x z))
(newline)
(loop x y (+ z 1)))
'done))
(loop a b c))
答案 0 :(得分:1)
似乎有一个遗失的身体。在Scheme中,lambda定义为
(lambda (args ...)
(define local-binding ...) ...
body ...)
distance
c
和loop
是本地定义,但没有正文。因此distance
对a
或b
没有任何作用,如果有效,它将始终返回未定义的值。例如。不是一个非常有用的程序。
当您修复时,您可能需要查看My code signals the error “application: not a procedure” or “call to non procedure”