0
(define-record-type car-ivars
       (现场效率(罐中可变气体)))
(定义记录型汽车方法
       (现场驾驶!在油箱中加油))
(定义加油 (lambda (cg) ((car-methods-refuel c) g)))
(定义get-gas-level
       (lambda (c) ((car-methods-get-gas-in-tank c))))
(定义驱动器!
       (lambda (c distance) ((car-methods-drive!c) distance)))

(定义制造汽车
       (λ(效率)
         (let ([car1 (make-car-ivars 效率 0)])
           (让([设置气体级别!
                   (lambda (gas) (car-ivars-gas-in-tank-set!car1 gas))]
                 【气级
                   (lambda () ((car-ivars-gas-in-tank car1)))])
             (制造汽车方法
               ;;驾驶!
               (λ(距离)
                (设置气体水平!
                 (- (get-gas-level)
                 (/效率距离)))
               ;;获取气体水平
               (获取气体水平)
               ;;加油
               (λ(气体1)
                 (设置气体水平!
                    (+ (get-gas-level) gas1)))))))))

好的,所以我有这个代码。当我尝试运行我的测试用例时

(定义混合动力(制造汽车 50))
我得到一个
例外:#procedure 构造函数的参数数量不正确
错误。而且我不太确定它来自哪里。

4

1 回答 1

0

您对drivein 部分的定义make-car缺少右括号,这意味着make-car-methods只有一个参数。

在 Emacs 中重新缩进使这一点非常明显:

(define make-car
    (lambda (efficiency)
        (let ([car1 (make-car-ivars efficiency 0)])
            (let ([set-gas-level!
                   (lambda (gas) (car-ivars-gas-in-tank-set! car1 gas))]
                  [gas-level
                   (lambda () ((car-ivars-gas-in-tank car1)))])
                (make-car-methods
                 ;;drive!
                 (lambda (distance)
                     (set-gas-level!
                      (- (get-gas-level)
                         (/ efficiency distance)))
                     ;;get-gas-level
                     (get-gas-levels)
                     ;;refuel
                     (lambda (gas1)
                         (set-gas-level!
                          (+ (get-gas-level) gas1)))))))))
于 2012-11-08T21:33:55.573 回答