summaryrefslogtreecommitdiff
path: root/ipl/procs/seqimage.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/procs/seqimage.icn')
-rw-r--r--ipl/procs/seqimage.icn64
1 files changed, 64 insertions, 0 deletions
diff --git a/ipl/procs/seqimage.icn b/ipl/procs/seqimage.icn
new file mode 100644
index 0000000..7ff9b2a
--- /dev/null
+++ b/ipl/procs/seqimage.icn
@@ -0,0 +1,64 @@
+############################################################################
+#
+# File: seqimage.icn
+#
+# Subject: Procedures to produce string image of Icon result sequence
+#
+# Author: Ralph E. Griswold
+#
+# Date: June 20, 1997
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# 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 an 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