to error mess = fprints 0 mess exit // programming: make a list of numbers // print them // count the lenght of the list storage = array 1000 free = 2 end = 1000 // a data item has two slots: num, link // access functions to setnum a b = storage[a] = b to setlink a b = storage[a+1] = b to getnum a = storage[a] to getlink a = storage[a+1] to notnull p = p != 0 to isnull p = p == 0 // create a new data item stored a number n to newitem n | a = if free == end error "no more memory" a = free free = free + 2 setnum a n setlink a 0 a // return a new data item to newlist = newitem 0 // create an empty list, return a handle to its header to insert a k = // insert an item "a" into the list "k" setlink a (getlink k) setlink k a to makelist | k a = k = newlist // make an empty list a = newitem 2 // make a new node storing 2 insert a k insert (newitem 3) k insert (newitem 5) k insert (newitem 7) k k // return the list to printlist k | p = p = getlink k // get the list while notnull p print (getnum p) space p = getlink p // get to the next item nl to printlistrec2 k = {} to printlistrec k = printlistrec2 (getlink k) nl to printlistrec2 k = if notnull k print (getnum k) space printlistrec2 (getlink k) to listlen k | c p = c = 0 p = getlink k while notnull p c = c + 1 p = getlink p c to listlenrec2 k = {} to listlenrec k = listlenrec2 (getlink k) to listlenrec2 k = if isnull k 0 else 1 + (listlenrec2 (getlink k)) to listlenreca2 k c = {} to listlenreca k = listlenreca2 (getlink k) 0 to listlenreca2 k c = if isnull k c else listlenreca2 (getlink k) (c+1) to main | k = k = makelist printlistrec k print listlenreca k nl // 19 Jan 2010