Макс и мин в OPP в ракетке - PullRequest
0 голосов
/ 03 мая 2020

Я застрял на одной проблеме в моей домашней задаче по программированию в моем классе Введение в компьютерные науки. Нам пришлось использовать OPP в Racket, чтобы создать% автомобилей, а затем использовать объект для создания my-car. Нам также пришлось создать функцию ускорения, чтобы ускорить my-car на 10 при каждом вызове функции и тормозе, что будет тормозить автомобиль на 7 при каждом вызове. НО мы должны установить минимальную скорость 0 и максимум 65, поэтому my-car не go ниже 0 независимо от того, сколько раз мы называем тормозом, и она не go выше 65 независимо от того, сколько раз мы называем ускорение. Любой совет, как это сделать? Я пытался: (определить / publi c set-current-speed) (диапазон 0 65), НО, который не работал. Я никогда не работал с диапазонами или минимальными / максимальными значениями, поэтому я просто застрял. Любой совет будет принята с благодарностью! Заранее спасибо.

(require racket)

(define auto%
  (class object%
    (field
     (color "?")
     (brand "?")
     (model "?")
     (year 1900)
     (current-speed 0)
     )
    (super-new)
    (define/public (get-color)
      color
    )
    (define/public (set-color new-color)
      (set! color new-color)
    )
    (define/public (set-brand given-brand)
      (set! brand given-brand)
    )
    (define/public (set-model given-model)
      (set! model given-model)
    )
    (define/public (set-year given-year)
      (set! year given-year)
      )
    (define/public (get-info)
      (string-append color " " (number->string year) " " brand " " model " ")
    )
    (define/public (get-current-speed)
      current-speed
    )
      )
    (define/public (accelerate)
      (set! current-speed (+ current-speed 10))
      )
    (define/public (brake)
      (set! current-speed (- current-speed 7))
      )
    )
  )

1 Ответ

0 голосов
/ 04 мая 2020

Один подход будет использовать let, чтобы связать скорость после ускорения с new-speed, а затем проверить, превысил ли new-speed ограничение скорости. Если это так, просто set! значение current-speed для ограничения скорости, в противном случае установите его на new-speed. Аналогичный подход будет работать для замедления.

(define current-speed 50)

(define (accelerate)
  (let ((new-speed (+ current-speed 10)))
    (if (> new-speed 65)
        (set! current-speed 65)
        (set! current-speed new-speed))))
scratch.rkt> current-speed
50
scratch.rkt> (accelerate)
scratch.rkt> current-speed
60
scratch.rkt> (accelerate)
scratch.rkt> current-speed
65
scratch.rkt> (accelerate)
scratch.rkt> current-speed
65
...