我正在浏览教程列表(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)))
答案 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
我强烈建议您获得一个匹配括号或更好括号的编辑器,该编辑器相应地对代码进行缩进,以便您在犯错时可以轻松看到。