宏扩展期间出错:空体#f

问题描述 投票:0回答:1

我正在学习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))
scheme
1个回答
1
投票

似乎有一个遗失的身体。在Scheme中,lambda定义为

(lambda (args ...)
  (define local-binding ...) ...
  body ...)

distance cloop是当地的定义,但没有身体。因此distance不会对ab做任何事情,如果它有效,它将总是返回一个未定义的值。例如。不是一个非常有用的程序。

当你修好了,你可能想看看My code signals the error “application: not a procedure” or “call to non procedure”

© www.soinside.com 2019 - 2024. All rights reserved.