Streams are nothing but lazy lists. They are similar to ordinary lists and they provide the same functionality as that of lists. The difference between Streams and lists is that they are lazy in nature and each cell of a Stream is suspended and is forced only when required. Streams have been used in some of the below mentioned data structures. Since each suspension comes with a little overhead, Streams should be used only when there is a good enough reason to do so.
syntax
( Stream A)
- : (Rec
g333057
(U (Boxof (U (-> (Pairof Integer g333057)) (Pairof Integer g333057)))
Null))
'#&(1 . #&(2 . #&(3 . #&(4 . #&(5 . #&(6))))))
In the above example, the stream obtained will be similar to lists but will lazy in nature. It will have 1 as its first element.
value
empty-stream :(Stream Nothing)
procedure
( empty-stream? strm)→Boolean
- : Boolean
#f
- : Boolean
#t
procedure
( stream-cons astrm)→(Stream A)
a:A
- : (Boxof
(-> (Pairof
Positive-Byte
(Rec
g333081
(U (Boxof
(U (-> (Pairof Integer g333081)) (Pairof Integer g333081)))
Null)))))
'#&#<procedure:...fds/pfds/stream.rkt:40:7>
In the above example, (stream-cons 10(stream 123456)) returns the stream (stream 10123456).
procedure
( stream-car strm)→A
- : Integer
1
stream-car: given stream is empty
procedure
( stream-cdr strm)→(Stream A)
- : (Rec
g333103
(U (Boxof (U (-> (Pairof Integer g333103)) (Pairof Integer g333103)))
Null))
'#&(2 . #&(3 . #&(4 . #&(5 . #&(6)))))
stream-cdr: given stream is empty
In the above example, (stream-cdr strm) returns (stream 23456).
procedure
( stream-append strm1strm2)→(Stream A)
- : (Rec
g333125
(U (Boxof (U (-> (Pairof Integer g333125)) (Pairof Integer g333125)))
Null))
'#&#<procedure:...fds/pfds/stream.rkt:40:7>
In the above example, (stream-append strm1strm2) returns the stream, (stream 123456513242).
procedure
( stream-reverse strm)→(Stream A)
- : (Rec
g333134
(U (Boxof (U (-> (Pairof Integer g333134)) (Pairof Integer g333134)))
Null))
'#&#<procedure:...fds/pfds/stream.rkt:40:7>
In the above example, (stream-reverse (stream 123456)) returns (stream 654321).
procedure
( stream->list strm)→(ListofA)
- : (Listof Integer)
'(1 2 3 4 5 6)
- : (Listof Nothing)
'()
- : (Rec
g333156
(U (Boxof (U (-> (Pairof Integer g333156)) (Pairof Integer g333156)))
Null))
'#&(4 . #&(5 . #&(6)))
drop: not enough elements to drop
In the above example, (drop 3(stream 123456)) returns (stream 456).
(take 5(stream 1)) does not throw any error because of its lazy nature. take returns a suspension rather than finishing the whole computation.
- : (Rec
g333174
(U (Boxof (U (-> (Pairof Integer g333174)) (Pairof Integer g333174)))
Null))
'#&#<procedure:...fds/pfds/stream.rkt:40:7>
- : (Rec
g333183
(U (Boxof (U (-> (Pairof Integer g333183)) (Pairof Integer g333183)))
Null))
'#&#<procedure:...fds/pfds/stream.rkt:40:7>
In the above example, (take 3(stream 123456)) returns (stream 123).