|
|
1.1 root 1: #
2: # D E F I N E D C O N T R O L O P E R A T I O N S
3: #
4:
5: # This program illustrates how programmer-control operations can be
6: # implemented in Icon using co-expressions and the p{ ... }
7: # syntax that facilitates their use.
8:
9: procedure main()
10: every write(Galt{1 to 10,!"abcd",1 to 10})
11: write(Seqimage{star("abc") \ 10})
12: write(Seqimage{1 to 1000,5})
13: write("---")
14: every write(Limit{1 to 100,3})
15: write("---")
16: every write(Ranseq{!"abcd",1 to 10})
17: end
18:
19: procedure star(s)
20: suspend "" | (star(s) || !s)
21: end
22:
23: procedure Galt(a)
24: local e
25: every e := !a do suspend |@e
26: end
27:
28: procedure Limit(a)
29: local i, x
30: while i := @a[2] do {
31: a[1] := ^a[1]
32: every 1 to i do
33: if x := @a[1] then suspend x
34: else break
35: }
36: end
37:
38: procedure Ranseq(a)
39: local x
40: while x := @?a do suspend x
41: end
42:
43: procedure Seqimage(a)
44: local seq, result, i
45: seq := ""
46: i := @a[2]
47: while result := image(@a[1]) do
48: if *a[1] > \i then {
49: seq ||:= ", ..."
50: break
51: }
52: else seq ||:= ", " || result
53: return "{" || seq[3:0] || "}" | "{}"
54: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.