home *** CD-ROM | disk | FTP | other *** search
- ############################################################################
- #
- # File: seqimage.icn
- #
- # Subject: Procedures to produce string image of Icon result sequence
- #
- # Author: Ralph E. Griswold
- #
- # Date: June 10, 1988
- #
- ###########################################################################
- #
- # The procedure Seqimage{e,i,j} produces a string image of the
- # result sequence for the expression e. The first i results are
- # printed. If i is omitted, there is no limit. If there are more
- # than i results for e, ellipses are provided in the image after
- # the first i. If j is specified, at most j results from the end
- # of the sequence are printed after the ellipses. If j is omitted,
- # only the first i results are produced.
- #
- # For example, the expressions
- #
- # Seqimage{1 to 12}
- # Seqimage{1 to 12,10}
- # Seqimage{1 to 12,6,3}
- #
- # produce, respectively,
- #
- # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
- # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...}
- # {1, 2, 3, 4, 5, 6, ..., 10, 11, 12}
- #
- #
- # Warning:
- #
- # If j is not omitted and e has a infinite result
- # sequence, Seqimage does not terminate.
- #
- ############################################################################
-
- procedure Seqimage(L)
- local seq, result, i, j, resid
-
- seq := ""
- i := @L[2]
- j := @L[3]
- while result := image(@L[1]) do
- if *L[1] > \i then {
- if /j then {
- seq ||:= ", ..."
- break
- }
- else {
- resid := [", " || result]
- every put(resid,", " || image(|@L[1]))
- if *resid > j then seq ||:= ", ..."
- every seq ||:= resid[*resid -j + 1 to *resid]
- }
- }
- else seq ||:= ", " || result
- return "{" || seq[3:0] || "}" | "{}"
- end
-