由于某些原因,V未绑定

时间:2018-12-21 20:59:52

标签: scheme

我正在浏览教程列表(http://www.shido.info/lisp/scheme4_e.html)。我必须练习2.4,这是我的答案。我已经看到了答案,所以我知道它是错误的答案。但是我想让我的解决方案“起作用”。我必须使用以后的练习中使用的语法来简化问题或答案。由于某些原因,当我尝试使用一些合理的参数执行main函数(ballthrown)时,解释器只是返回并说v是未绑定的,并要求提供一个值。我正在使用mit schemer。

(define pi (* 4 (atan 1.0)))
(define g 9.8)

; calculate the distance that a ball goes when thrown with an initial velocity

(define (d2r d)
    (* (/ d pi 180)))

(define (fftime v)
    (* (/ v 2 g)))

(define (dur v t)
    (* v t))

(define (hozvec v1 r)
    (* v1 (cos r)))

(define (vervec v1 r)
    (* v1 (sin r)))

(define (ballthrown v1 d1)
  (let ((h (hozvec v1 (d2r d1))) (v (vervec v1 (d2r d1)))
    (let ((t (fftime v)))))
       (dur h t)))

1 个答案:

答案 0 :(得分:0)

此处ballthrown已根据括号正确缩进。

(define (ballthrown v1 d1)
  (let ((h (hozvec v1 (d2r d1)))
        (v (vervec v1 (d2r d1)))
        (let ((t (fftime v)))))
    (dur h t))) ; v and let is never used

现在,我刚刚在DrRacket中输入了此内容,然后按了 CTRL + i ,它将let移到了v的右边,告诉我{{ 1}}是您在外部let中进行的绑定之一。您是否看到let在以这种方式评估v时不存在?

外部v中可能缺少右括号,内部let中有太多括号。这两个相互抵消。正确的版本是:

let

我强烈建议您获得一个匹配括号或更好括号的编辑器,该编辑器相应地对代码进行缩进,以便您在犯错时可以轻松看到。