# # D E F I N E D C O N T R O L O P E R A T I O N S # # This program illustrates how programmer-control operations can be # implemented in Icon using co-expressions and the p{ ... } # syntax that facilitates their use. procedure main() every write(Galt{1 to 10,!"abcd",1 to 10}) write(Seqimage{star("abc") \ 10}) write(Seqimage{1 to 1000,5}) write("---") every write(Limit{1 to 100,3}) write("---") every write(Ranseq{!"abcd",1 to 10}) end procedure star(s) suspend "" | (star(s) || !s) end procedure Galt(a) local e every e := !a do suspend |@e end procedure Limit(a) local i, x while i := @a[2] do { a[1] := ^a[1] every 1 to i do if x := @a[1] then suspend x else break } end procedure Ranseq(a) local x while x := @?a do suspend x end procedure Seqimage(a) local seq, result, i seq := "" i := @a[2] while result := image(@a[1]) do if *a[1] > \i then { seq ||:= ", ..." break } else seq ||:= ", " || result return "{" || seq[3:0] || "}" | "{}" end