Ответ зависит от того, какой тип потоков вы используете.
В основном есть два разных типа потоков:
- empty streams
- streams consisting of an element followed by an stream
Поэтому для представления этих двух типов необходимы два разных типа значений.
В sicp пишут
Существует различимый объект, пустой поток, который не может быть
результат любой операции против потока и который может быть идентифицирован
с предикатом stream-null?
Один из способов определения различимого (уникального) объекта в Схеме - это выделить
новая cons-ячейка - ее адрес уникален для этой ячейки.
(define the-empty-stream (list 'this-is-the-empty-stream))
(define (stream-null? x) (eq? x the-empty-stream))
В Racket можно просто использовать структуру для представления пустого потока
(struct the-empty-stream ())
(define stream-null? the-empty-stream?)
Такие функции, как stream->list
, должны обрабатывать оба типа списков.
Возвращаясь к вашему вопросу: если вы используете потоки SICP, ответ прост.
Выражение the-empty-stream
даст вам пустой поток.
Если вы определяете свой собственный, вам нужно будет выбрать способ представления
пустой поток - а затем тщательно измените все функции потока, которые вы
должен обрабатывать пустой поток тоже.