| <<O>> Difference Topic PowerSeriesCspExample (r1.8 - 28 Apr 2005 - TWikiGuest) |
| <<O>> Difference Topic PowerSeriesCspExample (r1.7 - 29 Jan 2005 - LiYan) |
| <<O>> Difference Topic PowerSeriesCspExample (r1.6 - 23 Jan 2005 - TWikiGuest) |
| <<O>> Difference Topic PowerSeriesCspExample (r1.5 - 27 Feb 2004 - IsaacGouy) |
| Added: | |
| > > |
This is an unusual use of the JCSP library. Normally the CSP processes are defined, created and then started. In this case, we spawn new processes as needed while the other processes are running.
See "Squinting at Power Series" and "Power Series, Power Serious".
|
| Changed: | |
| < < | /* Please try the NoviceExamples? before these examples |
| > > | /* Please try the NoviceExamples? before these examples |
| Changed: | |
| < < |
let int MAX = 10;
let ArrayList? |
| > > |
let ArrayList? |
| Deleted: | |
| < < | let a = new Rational(num: 1, den: 5); print( deriv( a * ones() )); |
| Changed: | |
| < < | par( processes.toArray ).run; |
| > > | void stopProcesses(){ for (each : m) each.stop; m.clear; } let count = 5; println(""); println("=== derivatives ==="); let d = derivative(ones()); print(d, count); stopProcesses(); println(""); println("=== integrals ==="); let i = integral(ones()); print(i, count); stopProcesses(); println(""); println("=== 1 / (1-x)**2 ==="); let o = split(ones()); print(o[0]*o[1], count); |
| Changed: | |
| < < | class PowerSeries? { One2OneChannel chan = new One2OneChannel(); Rational read() = cast(chan.read); void write(Rational a) = chan.write(a); |
| > > | PowerSeries? ones(){ void->void b(PowerSeries? P){ void a(){ while(true) P.write( RationalOne?() ); } return a; } return managedPS(b); |
| Changed: | |
| < < | PowerSeries? `+`(PowerSeries? F, PowerSeries? G){ let P = new PowerSeries?(); void a(){ while(true) P.write(F.read + G.read); } processes.add( seq(a) ); return P; |
| > > | PowerSeries? `*`(PowerSeries? F, PowerSeries? G){ void->void b(PowerSeries? P){ void a(){ let f = F.read; let g = G.read; let FF = split(F); let GG = split(G); P.write(f * g); let fG = f * GG[0]; let gF = g * FF[0]; let xFG = xmul(FF[1] * GG[1]); while(true) P.write(fG.read + gF.read + xFG.read); } return a; } return managedPS(b); |
| Deleted: | |
| < < | PowerSeries? `+`(Rational c, PowerSeries? F){ let P = new PowerSeries?(); void a(){ while(true) P.write(c + F.read); } processes.add( seq(a) ); return P; } |
| Changed: | |
| < < | PowerSeries? `-`(PowerSeries? F, PowerSeries? G){ let P = new PowerSeries?(); void a(){ while(true) P.write(F.read - G.read); } processes.add( seq(a) ); return P; |
| > > | PowerSeries?[] split(PowerSeries? F){ let P0 = new PowerSeries?(channel: One2OneChannel.create(new InfiniteBuffer?())); let P1 = new PowerSeries?(channel: One2OneChannel.create(new InfiniteBuffer?())); let pm = new ProcessManager?( new Delta2(F.channel,P0.channel,P1.channel) ); m.add(pm); pm.start; return [P0,P1]; |
| Added: | |
| > > | |
| Changed: | |
| < < | let P = new PowerSeries?(); |
| > > | void->void b(PowerSeries? P){ |
| Changed: | |
| < < | processes.add( seq(a) ); return P; |
| > > | return a; } return managedPS(b); |
| Changed: | |
| < < | void print(PowerSeries? F){ |
| > > | PowerSeries? xmul(PowerSeries? F){ void->void b(PowerSeries? P){ void a(){ P.write(RationalZero?()); while(true) P.write(F.read); } return a; } return managedPS(b); } |
| Added: | |
| > > | void print(PowerSeries? F, int n){ |
| Changed: | |
| < < | while(count<MAX){ println(F.read); |
| > > | println("Value\t\tThreads"); while(count<n){ println(F.read + "\t\t" + Thread.activeCount()); |
| Deleted: | |
| < < | System.exit(0); |
| Changed: | |
| < < | processes.add( seq(a) ); |
| > > | seq(a).run; |
| Changed: | |
| < < | PowerSeries? ones(){ let P = new PowerSeries?(); void a(){ while(true)P.write( new Rational(num: 1, den: 1) ); } processes.add( seq(a) ); return P; |
| > > | PowerSeries? derivative(PowerSeries? F){ void->void b(PowerSeries? P){ void a(){ var f = F.read; var n = 1; while(true){ f = F.read; P.write( new Rational(num: n*f.num, den: f.den) ); n++; } } return a; } return managedPS(b); |
| Changed: | |
| < < | PowerSeries? deriv(PowerSeries? F){ let P = new PowerSeries?(); |
| > > | PowerSeries? integral(PowerSeries? F){ void->void b(PowerSeries? P){ |
| Changed: | |
| < < | P.write( new Rational(num: n*f.num, den: f.den) ); |
| > > | P.write( new Rational(num: f.num, den: f.den*n) ); |
| Added: | |
| > > | return a; } return managedPS(b); } |
| Changed: | |
| < < | processes.add( seq(a) ); |
| > > | class PowerSeries? { One2OneChannel channel = new One2OneChannel(); Rational read() = cast(channel.read); void write(Rational a) = channel.write(a); } PowerSeries? managedPS(PowerSeries?->(void->void) f){ let P = new PowerSeries?(); let a = f(P); let pm = new ProcessManager?( seq(a) ); m.add(pm); pm.start; |
| Changed: | |
| < < | See "Squinting at Power Series" (1989) |
| > > | Experimental use of the "Communicating Sequential Processes for Java TM (JCSP)" library. See "Squinting at Power Series" |
| Changed: | |
| < < | Experimental use of the "Communicating Sequential Processes for Java TM (JCSP)" library. |
| > > | and "Power Series, Power Serious" http://citeseer.nj.nec.com/mcilroy98power.html >java -cp jcspclasses.jar;power.jar power.fun |
| Changed: | |
| < < |
>java -cp "jcspclasses.jar;power.jar" power.fun
|
| > > |
= derivatives =
Value Threads
= integrals =
Value Threads
= 1 / (1-x)**2 =
Value Threads
|
| Changed: | |
| < < |
if (gcd = 1 || gcd = denominator){
|
| > > | if (gcd == 1){ |
| Deleted: | |
| < < | } |
| Changed: | |
| < < | toString(Rational a) = a.num + "/" + a.den; |
| > > | toString(){ if (den == 1) return num.toString; else return num + "/" + den; } } |
| Deleted: | |
| < < |
Rational `-`(Rational a, Rational b){
if (a.den == b.den)
return new Rational(num: a.num - b.num, den: a.den);
else
return new Rational(
|
| Added: | |
| > > | Rational RationalOne?() = new Rational(num: 1, den: 1); Rational RationalZero?() = new Rational(num: 0, den: 1); |
| <<O>> Difference Topic PowerSeriesCspExample (r1.4 - 26 Feb 2004 - IsaacGouy) |
| Changed: | |
| < < | let d = split( deriv( ones()) ); print( add(d[0],d[1]) ); |
| > > | let a = new Rational(num: 1, den: 5); print( deriv( a * ones() )); |
| Changed: | |
| < < | par( processes.toArray ); |
| > > | par( processes.toArray ).run; |
| Changed: | |
| < < | One2OneChannel ones(){ let out = new One2OneChannel(); |
| > > | class PowerSeries? { One2OneChannel chan = new One2OneChannel(); |
| Changed: | |
| < < | void a(){ while(true) out.write( new Rational(num: 1, den: 1) ); |
| > > | Rational read() = cast(chan.read); void write(Rational a) = chan.write(a); |
| Added: | |
| > > | PowerSeries? `+`(PowerSeries? F, PowerSeries? G){ let P = new PowerSeries?(); void a(){ while(true) P.write(F.read + G.read); } |
| Changed: | |
| < < | return out; |
| > > | return P; |
| Changed: | |
| < < | One2OneChannel deriv(One2OneChannel in){ let out = new One2OneChannel(); void a(){ in.read; var n = 1; while(true){ let Rational r = cast(in.read); out.write( new Rational(num: n*r.num, den: r.den) ); n++; } |
| > > | PowerSeries? `+`(Rational c, PowerSeries? F){ let P = new PowerSeries?(); void a(){ while(true) P.write(c + F.read); } processes.add( seq(a) ); return P; |
| Added: | |
| > > | PowerSeries? `-`(PowerSeries? F, PowerSeries? G){ let P = new PowerSeries?(); void a(){ while(true) P.write(F.read - G.read); } |
| Changed: | |
| < < | return out; |
| > > | return P; |
| Changed: | |
| < < | One2OneChannel[] split(One2OneChannel in){ let out1 = One2OneChannel.create( new InfiniteBuffer?() ); let out2 = One2OneChannel.create( new InfiniteBuffer?() ); processes.add( new Delta2(in,out1,out2) ); return [out1,out2]; |
| > > | PowerSeries? `*`(Rational c, PowerSeries? F){ let P = new PowerSeries?(); void a(){ while(true) P.write(c * F.read); } processes.add( seq(a) ); return P; |
| Changed: | |
| < < | One2OneChannel add(One2OneChannel f, One2OneChannel g){ let out = new One2OneChannel(); |
| > > | void print(PowerSeries? F){ |
| Changed: | |
| < < | var Rational rf; var Rational rg; while(true){ rf = cast(f.read); rg = cast(g.read); out.write( rf + rg ); |
| > > | var count = 0; while(count<MAX){ println(F.read); count++; } System.exit(0); |
| Added: | |
| > > | processes.add( seq(a) ); |
| Added: | |
| > > | PowerSeries? ones(){ let P = new PowerSeries?(); void a(){ while(true)P.write( new Rational(num: 1, den: 1) ); } |
| Changed: | |
| < < | return out; |
| > > | return P; |
| Changed: | |
| < < | void print(One2OneChannel in){ |
| > > | PowerSeries? deriv(PowerSeries? F){ let P = new PowerSeries?(); |
| Changed: | |
| < < | var count = 0; while(count<MAX){ let Rational r = cast( in.read ); println(r); count++; |
| > > | var f = F.read; var n = 1; while(true){ f = F.read; P.write( new Rational(num: n*f.num, den: f.den) ); n++; |
| Deleted: | |
| < < | System.exit(0); |
| Added: | |
| > > | return P; |
| Changed: | |
| < < |
|
| > > |
|
| <<O>> Difference Topic PowerSeriesCspExample (r1.3 - 26 Feb 2004 - IsaacGouy) |
| Deleted: | |
| < < | let One2OneChannelInt done = new One2OneChannelInt(); |
| Deleted: | |
| < < | |
| Changed: | |
| < < | let m = new ProcessManager?( par( processes.toArray )); m.start; done.read; m.stop; |
| > > | par( processes.toArray ); |
| Changed: | |
| < < | done.write(0); |
| > > | System.exit(0); |
| <<O>> Difference Topic PowerSeriesCspExample (r1.2 - 26 Feb 2004 - IsaacGouy) |
| Added: | |
| > > | let One2OneChannelInt done = new One2OneChannelInt(); |
| Added: | |
| > > | |
| Changed: | |
| < < | par( processes.toArray ).run; |
| > > | let m = new ProcessManager?( par( processes.toArray )); m.start; done.read; m.stop; |
| Changed: | |
| < < | System.exit(0); |
| > > | done.write(0); |
| <<O>> Difference Topic PowerSeriesCspExample (r1.1 - 25 Feb 2004 - IsaacGouy) |
| Added: | |
| > > |
%META:TOPICINFO{author="IsaacGouy" date="1077746460" format="1.0" version="1.1"}%
%META:TOPICPARENT{name="CodeExamples"}%
/* Please try the NoviceExamples before these examples
To compile:
nicec --classpath "jcspclasses.jar;nice-csp.jar" --sourcepath .. -a power.jar power
To run:
java -cp "jcspclasses.jar;power.jar" power.fun
*/
import nice.csp;
import nice.csp.util;
import jcsp.plugNplay.* (!);
let int MAX = 10;
let ArrayList<CSProcess> processes = new ArrayList();
void main(String[] args){
let d = split( deriv( ones()) );
print( add(d[0],d[1]) );
par( processes.toArray ).run;
}
One2OneChannel ones(){
let out = new One2OneChannel();
void a(){
while(true)
out.write( new Rational(num: 1, den: 1) );
}
processes.add( seq(a) );
return out;
}
One2OneChannel deriv(One2OneChannel in){
let out = new One2OneChannel();
void a(){
in.read;
var n = 1;
while(true){
let Rational r = cast(in.read);
out.write( new Rational(num: n*r.num, den: r.den) );
n++;
}
}
processes.add( seq(a) );
return out;
}
One2OneChannel[] split(One2OneChannel in){
let out1 = One2OneChannel.create( new InfiniteBuffer() );
let out2 = One2OneChannel.create( new InfiniteBuffer() );
processes.add( new Delta2(in,out1,out2) );
return [out1,out2];
}
One2OneChannel add(One2OneChannel f, One2OneChannel g){
let out = new One2OneChannel();
void a(){
var Rational rf;
var Rational rg;
while(true){
rf = cast(f.read);
rg = cast(g.read);
out.write( rf + rg );
}
}
processes.add( seq(a) );
return out;
}
void print(One2OneChannel in){
void a(){
var count = 0;
while(count<MAX){
let Rational r = cast( in.read );
println(r);
count++;
}
System.exit(0);
}
processes.add( seq(a) );
}
/* Notes - language
See "Squinting at Power Series" (1989)
http://citeseer.nj.nec.com/mcilroy89squinting.html
Experimental use of the "Communicating Sequential Processes for Java TM (JCSP)" library.
>java -cp "jcspclasses.jar;power.jar" power.fun
2/1
4/1
6/1
8/1
10/1
12/1
14/1
16/1
18/1
20/1
*/
public class Rational {
long num; // dividend
long den; // divisor
{
let denominator = abs(den);
var numerator = num;
if (den<0) numerator = -numerator;
let gcd = numerator.gcd(denominator);
if (gcd == 1 || gcd == denominator){
num = numerator;
den = denominator;
}
else {
num = numerator/gcd;
den = denominator/gcd;
}
}
}
toString(Rational a) = a.num + "/" + a.den;
Rational `+`(Rational a, Rational b){
if (a.den == b.den)
return new Rational(num: a.num + b.num, den: a.den);
else
return new Rational(
num: (a.num * b.den) + (b.num * a.den),
den: a.den * b.den
);
}
Rational `-`(Rational a, Rational b){
if (a.den == b.den)
return new Rational(num: a.num - b.num, den: a.den);
else
return new Rational(
num: (a.num * b.den) - (b.num * a.den),
den: a.den * b.den
);
}
Rational `*`(Rational a, Rational b) =
new Rational(num: a.num * b.num, den: a.den * b.den);
-- IsaacGouy - 25 Feb 2004 |
| Topic PowerSeriesCspExample . { View | Diffs | r1.8 | > | r1.7 | > | r1.6 | More } |
|
Revision r1.1 - 25 Feb 2004 - 22:01 GMT - IsaacGouy Revision r1.8 - 28 Apr 2005 - 11:56 GMT - TWikiGuest |
Copyright © 1999-2003 by the contributing authors.
All material on this collaboration platform is the property of the contributing authors. Ideas, requests, problems regarding TWiki? Send feedback. |