|
|
BSD 4.3
#
# 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.