Я использую знаменитую книгу «Как разрабатывать программы». Точнее, первое издание (физическое у меня есть). В 6-й главе есть несколько упражнений со структурами. В одном из них вы ...

4
Pedro Delfino 31 Мар 2021 в 16:51

1 ответ

Лучший ответ

Racket, являясь своего рода схемой, является языком, ориентированным на выражения < / em>. Это означает, что последнее выражение в составном выражении является значением всего выражения.

Это включает в себя цитируемый символ. Его значение, символ, является возвращаемым значением.

Вызов функции (next current-color) переключает цвет светофора и возвращает символ, указывающий новый цвет светофора:

;; next : symbol -> symbol

Ваш код меняет цвет и возвращает true (согласно спецификации для switch):

;; switch : symbol symbol -> true
;; your-next : symbol -> true

Это меняет способ использования функции next. С дизайном книги мы можем написать

....
   (let loop ( ... )
       .....
       (let ((current-color (next current-color)))
           ......
           ))
....

В вашем дизайне такой естественный стиль циклического кода невозможен.

общее замечание: эти спецификации известны как типы, и мы позволяем типам руководить использованием функций в нашем коде. Они помогают нам увидеть, что входит, а что гаснет, поэтому мы можем соединить соответствующие провода , так сказать.

3
Will Ness 31 Мар 2021 в 16:40