Игры на Scheme(Lisp) в среде DrRacket

Комментарии (2)

  • 18 июня 2017 в 19:10 (комментарий был изменён)

    0

    s — это переменная, отвечающая за цвет. Переход в другое состояние можно представить
    следующей конструкцией
    (define (traffic-light-next s)
      (cond
        [(string=? "red" s) "green"]
        [(string=? "green" s) "yellow"]
        [(string=? "yellow" s) "red"]))
    

    Но ведь светлофор работает в режиме
    Зеленый => Желтый => Красный =>  Желтый => повторить
    

    А не в режиме
    Зеленый => Желтый => Красный => повторить
    

    То есть Зеленый и Красный переходят в Желтый. А вот Желтый может перейти и в Зеленый и в Красный.

    Выглядит, словно вы подгоняете реальность под ограничения архитектуры. Ведь функцию только от текущего состояния написать легче, чем от текущего+предыдущего. И это на столь легком примере!

    • 18 июня 2017 в 19:13

      0

      Кстати, я, конечно, понимаю, что в данном конкректном примере это очень легко пофиксить введя два разных «желтых»: «yellow-before-red» и «yellow-before-green» и машина состояний останется такой же простой, но это ведь абстрактный пример, а в играх очень редко бывает возможность обойтись таким простым решением.

© Habrahabr.ru