diff options
Diffstat (limited to 'docs/examples/pilib/piNat.scala')
-rw-r--r-- | docs/examples/pilib/piNat.scala | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/docs/examples/pilib/piNat.scala b/docs/examples/pilib/piNat.scala index 137c0e5e6a..8f0b11e27e 100644 --- a/docs/examples/pilib/piNat.scala +++ b/docs/examples/pilib/piNat.scala @@ -1,40 +1,40 @@ -package examples.pilib; +package examples.pilib -import scala.concurrent.pilib._; +import scala.concurrent.pilib._ //import pilib._; /** Church encoding of naturals in the Pi-calculus */ -object piNat with Application { +object piNat extends Application { /** Locations of Pi-calculus natural */ - class NatChan extends Chan[Triple[Chan[unit], Chan[NatChan], Chan[NatChan]]]; + class NatChan extends Chan[Triple[Chan[unit], Chan[NatChan], Chan[NatChan]]] /** Zero */ def Z(l: NatChan): unit = choice ( l * { case Triple(z, sd, d) => z.write(()) } - ); + ) /** Successor of Double */ def SD(n: NatChan, l: NatChan): unit = choice ( l * { case Triple(z, sd, d) => sd.write(n) } - ); + ) /** Double */ def D(n: NatChan, l: NatChan): unit = choice ( l * { case Triple(z, sd, d) => d.write(n) } - ); + ) /** Make "l" a location representing the natural "n" */ def make(n: int, l: NatChan): unit = if (n == 0) Z(l) else if (n % 2 == 0) { val l1 = new NatChan; spawn < D(l1, l) >; make(n/2, l1) } - else { val l1 = new NatChan; spawn < SD(l1, l) >; make(n/2, l1) }; + else { val l1 = new NatChan; spawn < SD(l1, l) >; make(n/2, l1) } /** Consume the natural "m" and put it successor at location "n" */ def Succ(m: NatChan, n: NatChan): unit = { - val z = new Chan[unit]; - val sd = new Chan[NatChan]; - val d = new Chan[NatChan]; + val z = new Chan[unit] + val sd = new Chan[NatChan] + val d = new Chan[NatChan] spawn < m.write(Triple(z, sd, d)) >; choice ( z * { x => make(1, n) }, @@ -45,9 +45,9 @@ object piNat with Application { /** Consume the natural "l" and put two copies at locations "m" and "n" */ def Copy(l: NatChan, m: NatChan, n: NatChan): unit = { - val z = new Chan[unit]; - val sd = new Chan[NatChan]; - val d = new Chan[NatChan]; + val z = new Chan[unit] + val sd = new Chan[NatChan] + val d = new Chan[NatChan] spawn < l.write(Triple(z, sd, d)) >; choice ( z * { x => spawn < Z(m) >; Z(n) }, @@ -62,9 +62,9 @@ object piNat with Application { /** Consume the natural at location "n" and return its value */ def value(n: NatChan): int = { - val z = new Chan[unit]; - val sd = new Chan[NatChan]; - val d = new Chan[NatChan]; + val z = new Chan[unit] + val sd = new Chan[NatChan] + val d = new Chan[NatChan] spawn < n.write(Triple(z, sd, d)) >; choice ( z * { x => 0 }, @@ -74,19 +74,17 @@ object piNat with Application { } // Test - val i = 42; - val l = new NatChan; - val l1 = new NatChan; - val l2 = new NatChan; - val l3 = new NatChan; + val i = 42 + val l = new NatChan + val l1 = new NatChan + val l2 = new NatChan + val l3 = new NatChan spawn < make(i, l) | Copy(l, l1, l2) | Succ(l2, l3) | System.out.println("" + i + " = " + value(l1)) | - System.out.println("succ " + i + " = " + value(l3)) - >; + System.out.println("succ " + i + " = " + value(l3)) > } - |