Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
s — это переменная, отвечающая за цвет. Переход в другое состояние можно представить
следующей конструкцией
(define (traffic-light-next s) (cond [(string=? "red" s) "green"] [(string=? "green" s) "yellow"] [(string=? "yellow" s) "red"]))
Зеленый => Желтый => Красный => Желтый => повторить
Зеленый => Желтый => Красный => повторить
Следующее состояние светофора основывается на нескольких предыдущих, поэтому нужно хранить список (хотя бы двух предыдущих) состояний и явно передавать его в функцию:
(define (next-state prev-states)
(let ((curr-state (first prev-states)))
(cond
((eqv? curr-state 'red) 'yellow)
((eqv? curr-state 'yellow)
(if (eqv? (second prev-states) 'red)
'green
'red))
((eqv? curr-state 'green) 'red)))
)> (next-state '(yellow green))
;Value: red
> (next-state '(yellow red))
;Value: green
Игры на Scheme(Lisp) в среде DrRacket