Search Top Index
HELP PDTOLIST updated Mark Rubinstein November 1985 pdtolist(procedure) -> dynamic list This procedure takes a procedure as argument and returns a dynamic list made from the procedure. A dynamic list is a PAIR whose FRONT is TRUE and whose BACK is the procedure given to PDTOLIST. HD and TL etc recognize such PAIRs. The procedure should be a generator, which, each time it is called, returns a new result, and returns *TERMIN when it is finished. The advantage of a dynamic list is that its elements are computed only as they are required, which can save space and time. PROGLIST, which plays a crucial role in the compiler is a dynamic list. ISDYNAMIC recognises dynamic lists, returning the generator procedure. EXPANDLIST expands dynamic lists and makes them static lists. See HELP * ATOM, *FRONT, *BACK, *DESTPAIR, *HD, *TL, *ISDYNAMIC, *EXPANDLIST For technical details see REF * LISTS --- Example ------------------------------------------------------------ By partially applying GENSYM to the word "CAT" we create a generator which returns, on succcessive calls, the words CAT1, CAT2, CAT3, etc. We can make a dynamic list from this procedure. vars catlist; pdtolist(gensym(%"cat"%)) -> catlist; CATLIST is now a dynamic list, represented by a PAIR, whose front is TRUE and whose back is the generator procedure front(catlist) => ** <true> back(catlist)=> ** <procedure gensym> The procedures HD and TL, unlike FRONT and BACK, make it look like an ordinary list. hd(catlist)=> ** cat1 catlist => ** [cat1 ...] ;;; printing does not expand dynamic lists repeat 20 times tl(catlist) -> catlist endrepeat; hd(catlist) => ** cat21 CATLIST is, in effect, an infinite (or very very long) list, bits of which come into existence as needed. --- C.all/help/pdtolist --- Copyright University of Sussex 1992. All rights reserved. ----------