Annotation of 43BSD/contrib/icon/samples/parallel.icn, revision 1.1.1.1

1.1       root        1: #
                      2: #          P A R A L L E L   E V A L U A T I O N
                      3: #
                      4: 
                      5: #  This program illustrates an alternative to Icon's normal
                      6: #  last-in, first-out resumption of generators that results
                      7: #  in "cross-product" evaluation of arguments.  Here, parallel
                      8: #  evaluation is provided.
                      9: 
                     10: procedure main()
                     11:    every Parallel{|write,!"abcd",1 to 10}
                     12:    every Parallel{|write,octal(),star("abc")}
                     13: end
                     14: 
                     15: procedure star(s)
                     16:    suspend "" | (star(s) || !s)
                     17: end
                     18: 
                     19: procedure octal()
                     20:    suspend (0 to 3) || (0 to 7) || (0 to 7)
                     21: end
                     22: 
                     23: procedure Parallel(a)
                     24:    local i, x
                     25:    x := list(*a)
                     26:    repeat {
                     27:       every i := 1 to *a do
                     28:          x[i] := @a[i] | fail
                     29:       suspend Call(x)
                     30:       }
                     31: end
                     32: 
                     33: procedure Call(a)
                     34:    suspend case *a of {
                     35:       1 : a[1]()
                     36:       2 : a[1](a[2])
                     37:       3 : a[1](a[2],a[3])
                     38:       4 : a[1](a[2],a[3],a[4])
                     39:       5 : a[1](a[2],a[3],a[4],a[5])
                     40:       6 : a[1](a[2],a[3],a[4],a[5],a[6])
                     41:       7 : a[1](a[2],a[3],a[4],a[5],a[6],a[7])
                     42:       8 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8])
                     43:       9 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9])
                     44:       10 : a[1](a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10])
                     45:       default :  stop("Call : too many args.")
                     46:       }
                     47: end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.