kb 28.09.2012 16:41 Azoth

Словил себя на некоторой (пусть слабоватой) наркомании. Начал на stack overflow описывать, как можно было бы в "чистом" языке выразить концепцию времени. Само время (time-stream) можно было бы выразить при помощи SICP'овского трюка с "потоками" (а ля питоновские генераторы), когда значение состоит из пары, первый элемент которой — текущий момент времени, а второй — лямбда, которая вычислит нам следующий момент времени.

Для денежного баланса вместо этого:
(define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))

вы бы сделали вот это:
(define (stream-withdraw balance amount-stream)
(cons-stream
balance
(stream-withdraw (- balance (stream-car amount-stream))
(stream-cdr amount-stream))))

Таким образом наша программа/кусок кода (если он зависит от времени), будет проходиться в цикле по этому бесконечному потоку, и в случае необходимости производить какие-то действия. Красота. Вроде бы "состояние переменных" и "состояние времени" похожи, а как-то провести простую аналогию в голове получилось не сходу.

Do you really want to delete ?