StreamΒΆ

A Stream object is represented as a list whose last element contains the wherewithal to create the next element, should it ever be required.

Let ints be the infinite stream of non-negative integers.

ints := [i for i in 0..]
  [0,1,2,3,4,5,6,7,8,9,...]
                               Type: Stream NonNegativeInteger

By default, ten stream elements are calculated. This number may be changed to something else by the system command

)set streams calculate

More generally, you can construct a stream by specifying its initial value and a function which, when given an element, creates the next element.

f : List INT -> List INT
                               Type: Void

f x == [x.1 + x.2, x.1]
                               Type: Void

fibs := [i.2 for i in [generate(f,[1,1])]]
  [1,1,2,3,5,8,13,21,34,55,...]
                               Type: Stream Integer

You can create the stream of odd non-negative integers by either filtering them from the integers, or by evaluating an expression for each integer.

[i for i in ints | odd? i]
  [1,3,5,7,9,11,13,15,17,19,...]
                               Type: Stream NonNegativeInteger

odds := [2*i+1 for i in ints]
  [1,3,5,7,9,11,13,15,17,19,...]
                               Type: Stream NonNegativeInteger

You can accumulate the initial segments of a stream using the scan operation.

scan(0,+,odds)
  [1,4,9,16,25,36,49,64,81,100,...]
                               Type: Stream NonNegativeInteger

The corresponding elements of two or more streams can be combined in this way.

[i*j for i in ints for j in odds]
  [0,3,10,21,36,55,78,105,136,171,...]
                               Type: Stream NonNegativeInteger

map(*,ints,odds)
  [0,3,10,21,36,55,78,105,136,171,...]
                               Type: Stream NonNegativeInteger

Many operations similar to those applicable to lists are available for :: streams.

first ints
0
Type: NonNegativeInteger
rest ints
[1,2,3,4,5,6,7,8,9,10,...]
Type: Stream NonNegativeInteger
fibs 20
6765
Type: PositiveInteger

See Also:

  • )help StreamFunctions1
  • )help StreamFunctions2
  • )help StreamFunctions3
  • )show Stream

Table Of Contents

This Page