eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'LazyCons':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: LazyCons


Inheritance:

   Object
   |
   +--Collection
      |
      +--SequenceableCollection
         |
         +--Cons
            |
            +--LazyCons

Package:
stx:libbasic2
Category:
Collections-Linked
Version:
rev: 1.10 date: 2021/01/20 14:03:33
user: cg
file: LazyCons.st directory: libbasic2
module: stx stc-classLibrary: libbasic2

Description:


This is an experimental (academic ?) goody for demonstration purposes.

A pair with lazy evaluation of the tail.
Useful to implement infinite lists as possible in lazy functional languages.

copyright

COPYRIGHT (c) 2003 by Claus Gittinger All Rights Reserved This software is furnished under a license and may be used only in accordance with the terms of that license and with the inclusion of the above copyright notice. This software may not be provided or otherwise made available to, or used by, any other person. No title to or ownership of the software is hereby transferred.

Instance protocol:

accessing-basic
o  cdr
return the tail, second or cdr - whatever you wonna call it.
Here, the tail is evaluated.
This makes me a non-lazy cons.

o  isLazyValue


Examples:


allNumbers represents an infinite list (1..)
  |gen allNumbers|

  gen := [:n | LazyCons car:n cdr:[ gen value:n+1 ]].
  allNumbers := gen value:1. 

  allNumbers head.   
  allNumbers tail head. 
  allNumbers tail tail head. 
sieve
  |gen filter sieve primeNumberList|

  gen := [:n | LazyCons car:n cdr:[ gen value:n+1 ]].
  filter := [:n :l |
              |head rest|

              head := l car.
              rest := l cdr.
              (head \\ n) ~~ 0 ifTrue:[
                  LazyCons car:head cdr:[ filter value:n value:rest ].
              ] ifFalse:[
                  filter value:n value:rest.
              ]
            ].

  sieve := [:l |
              |prime rest|

              prime := l car.
              rest := l cdr.
              LazyCons car:prime cdr:[ sieve value:(filter value:prime value:rest) ]
           ].

  primeNumberList := sieve value:(gen value:2).
  primeNumberList


ST/X 7.7.0.0; WebServer 1.702 at 20f6060372b9.unknown:8081; Sat, 27 Jul 2024 04:14:45 GMT