По какой-то причине V не связан - PullRequest
0 голосов
/ 21 декабря 2018

Я просматриваю список учебных пособий (http://www.shido.info/lisp/scheme4_e.html). Мне нужно выполнить упражнение 2.4, и это моя попытка ответа. Я уже видел ответ, поэтому знаю, что это неправильный ответ. НоЯ хочу, чтобы мое решение работало. Мне пришлось использовать синтаксис, который используется в последующих упражнениях, чтобы упростить задачу или мой ответ. По какой-то причине, когда я пытаюсь выполнить основную функцию (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 голосов
/ 22 декабря 2018

Здесь 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, сказав мне, что let является одним из привязываний, которые вы делаете во внешнем let.Видите ли вы, что v не может существовать в то время, когда v оценивается так, как оно есть?

Возможно, вам не хватает закрывающих скобок во внешних let и у вас слишком много во внутреннихlet.Эти двое отменяют друг друга.Правильная версия была бы:

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

Я настоятельно призываю вас найти редактор, который соответствует скобкам или лучше, который соответствующим образом отступает от кода, чтобы вы могли легко видеть, когда вы делаете ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...