|
|
BSD 4.3
#
# P A R A L L E L E V A L U A T I O N
#
# This program illustrates an alternative to Icon's normal
# last-in, first-out resumption of generators that results
# in "cross-product" evaluation of arguments. Here, parallel
# evaluation is provided.
procedure main()
every Parallel{|write,!"abcd",1 to 10}
every Parallel{|write,octal(),star("abc")}
end
procedure star(s)
suspend "" | (star(s) || !s)
end
procedure octal()
suspend (0 to 3) || (0 to 7) || (0 to 7)
end
procedure Parallel(a)
local i, x
x := list(*a)
repeat {
every i := 1 to *a do
x[i] := @a[i] | fail
suspend Call(x)
}
end
procedure Call(a)
suspend case *a of {
1 : a[1]()
2 : a[1](a[2])
3 : a[1](a[2],a[3])
4 : a[1](a[2],a[3],a[4])
5 : a[1](a[2],a[3],a[4],a[5])
6 : a[1](a[2],a[3],a[4],a[5],a[6])
7 : a[1](a[2],a[3],a[4],a[5],a[6],a[7])
8 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8])
9 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9])
10 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10])
default : stop("Call : too many args.")
}
end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.