Precomputed:
--- This system
is (very) experimental ---
The trace shows values exchanged on channels;
"output" is the standard output channel.
Simple Parallel Functional Language L.A. Monash Comp Sci 8/4/93 1: let 2: fact = lambda n. 3: let rec 4: f = lambda lo. lambda hi. lambda opch. 5: if lo = hi then 6: opch!hi -> stop 7: else {lo < hi} 8: let mid = (lo+hi)/2, 9: ch = chan 10: in {parallel divide and conquer} 11: f lo mid ch || {small numbers's} 12: f (mid+1) hi ch || {big numbers's} 13: ch?x -> ch?y -> opch!x*y {combine} -> stop 14: in f 1 n output 15: 16: in fact 10 17: 18: {\fB Parallel Factorial Program. \fP} 19: 20: --- end of parsing --- (let ((fact =(lambda (n ).(let rec ((f =(lambda (lo ).(lambda (hi ).(lambda (opch ).(if ((lo )=(hi ))then (((opch )!(hi ))->(stop ))else (let ((mid =(((lo )+(hi ))/(2 ))), ((ch =(chan)))) in ((((((f )(lo ))(mid ))(ch ))||((((f )((mid )+(1 )))(hi ))(ch )))||(((ch )?(x ))->(((ch )?(y ))->(((opch )!((x )*(y )))->(stop )))))))))))) in ((((f )(1 ))(n ))(output )))))) in ((fact )(10 ))) --- running --- ch3 1 ch3 2 ch4 2 ch4 3 ch5 4 ch5 5 ch6 6 ch6 20 ch7 6 ch7 7 ch8 42 ch8 8 ch9 9 ch9 10 ch10 336 ch10 90 ch11 120 ch11 30240 output 3628800 2 processes left 484 evals, 103 env cells used, 0 cells used --- finished ---