[Shootout-list] ring of processes

Brent Fulgham bfulg@pacbell.net
Sat, 02 Oct 2004 17:35:11 -0700


--=_d994c7c4e42e82a79968f22355efaa97
Content-Type: text/plain; charset="us-ascii"; format="flowed"

On 2004-10-02 10:30:04 -0700 Aaron Denney <wnoise@ofb.net> wrote:

> I have a first draft of this in Haskell.  It wasn't clear from the
> description exactly what the master process is supposed to after 
> sending
> the first two messages off, and I don't fully understand what the 
> erlang
> versions do, so I've had it replicate what the slave processes do:
> relay 10 high-priority messages, then 1 low priority messages, 10 
> times.

Bengt will have to weigh in with the correct answer, but based on a 
quick look at
the Erlang code the first process sends the high priority message to 
the next
upstream process, then sends its first low-priority message, then it 
just sits there
waiting to receive the first high-priority message (which will have to 
have been
passed around the ring).

When it gets the HP message, it repeats the same cycle, then waits to 
get a low
priority message.  For each low priority message it gets, it sends a 
low-priority
message.

> Could someone verify this is what it should be doing?  Any other
> comments?

Yes -- there are a few things wrong.  The result of this program 
should be the output
"the_ring", which is the atom the Erlang program sends around the ring 
as its high
priority message.

I've used my pathetic Haskell skills to modify it somewhat.  I'm not 
sure if this even
works (it sure takes a long time to run), but this is a bit closer to 
the intent of the
haskell version.

Maybe you or Einar could clean it up and make it work properly...

-Brent
<ringmsg.ghc>

--=_d994c7c4e42e82a79968f22355efaa97
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream; name="ringmsg.ghc"
Content-Disposition: attachment; filename="ringmsg.ghc"

ey0KIC0gcmluZ21zZy5ocyAgCiAtIGh0dHA6Ly9zaG9vdG91dC5hbGlvdGguZGViaWFuLm9y
Zy9iZW5jaC9yaW5nbXNnLwogLSBDb250cmlidXRlZCBieSBBYXJvbiBEZW5uZXkKIC0gCiAt
IFRoZXJlIGlzIG5vIGdlbmVyYWxpemVkIG1lc3NhZ2Ugc2VuZGluZyBiZXR3ZWVuIEhhc2tl
bGwgdGhyZWFkcywgZWFjaAogLSBiaXQgb2YgZGF0YSBoYXMgdG8gaGF2ZSBzb21lcGxhY2Ug
dG8gZ28uICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5CiAtIGhvb2tpbmcgdXAgImNoYW5uZWxz
IiAoQ2hhbiBhKSBiZXR3ZWVuIGFsbCBvZiB0aGUgcHJvY2Vzc2VzLCB0ZWxsaW5nCiAtIGVh
Y2ggd2hlcmUgdG8gc2VuZCwgYW5kIHdoZXJlIHRvIHJlY2VpdmUuICBJbiB0aGlzIGxpZ2h0
LCB0aGUgImNoZWNrCiAtIHNlbmRlciIgaXMgYSBiaXQgc2lsbHkuICBNVmFycyBjb3VsZCBh
bHNvIHdvcmsgZm9yIHRoaXMgY2FzZS4gIFRoZXkKIC0gbWlnaHQgYmUgbGlnaHRlciB3ZWln
aHQuICBUaGlzIGlzIGN1cnJlbnRseSB0YWtpbmcgMi41IHNlY29uZHMgcGVyCiAtIGl0ZXJh
dGlvbiBvbiBteSBtYWNoaW5lLCBzbyBpdCBiZWFycyBpbnZlc3RpZ2F0aW9uLgogLQogLSBB
IGNsb3NlciBtYXRjaCB0byB3aGF0IEVybGFuZyBkb2VzIHdvdWxkIGJlIHRvIG9ubHkgaGF2
ZSBvbmUgY2hhbm5lbCwKIC0gYnV0IHN0aWNrIGEgcHJpb3JpdHkgcXVldWUgdHlwZSB0aGlu
ZyAocGx1cyBmaWx0ZXJlZCBhY2Nlc3MgJiByZW1vdmFsKQogLSBvbiBpdC4KIC0KIC0gVGhl
IEVybGFuZyBpbXBsZW1lbnRhdGlvbiBvbmx5IGNoZWNrcyBmb3IgdGhlIGxvdyBwcmlvcml0
eSBtZXNzYWdlcwogLSBldmVyeSAxMCBoaWdoIHByaW9yaXR5IG1lc3NhZ2VzLCBpdCBsb29r
cyBsaWtlIHRoZSAiYWZ0ZXIgMCIgY2xhdXNlCiAtIG1lYW5zIGl0IGRvZXNuJ3QgYmxvY2sg
Zm9yIGl0LiAgV2UgZG8uICBUaGlzIG1heSBjaGFuZ2Ugc29tZXRoaW5ncy4KIC19Cm1vZHVs
ZSBNYWluKG1haW4pIHdoZXJlCmltcG9ydCBDb250cm9sLkNvbmN1cnJlbnQKaW1wb3J0IFN5
c3RlbShnZXRBcmdzKQppbXBvcnQgTGlzdCh6aXBXaXRoNCkKCi0tIENvbnN0YW50cwpoaWxv
cmF0aW8gPSAxMCAgICAgICAgLS0gaG93IG1hbnkgaGlnaCBwcmlvcml0eSBtZXNzYWdlcyB0
byBzZW5kIHBlciBsb3cgcHJpb3JpdHkuCnByb2Nlc3NlcyA9IDgxOTIgICAgICAtLSBob3cg
bWFueSBwcm9jZXNzZXMgdG8gcHV0IGluIGEgcmluZy4KbWVzc2FnZSA9ICJ0aGVfcmluZyIg
IC0tIFRoZSBoaWdoIHByaW9yaXR5IG1lc3NhZ2UgdG8gc2VuZCBhcm91bmQgdGhlIHJpbmcK
bG93X3ByaW9yaXR5ID0gImxvdyIgIC0tIEp1c3QgYSBmYWtlIG1lc3NhZ2UgdG8gYmUgdGhl
ICdsb3cgcHJpb3JpdHknIGd1eQpmb3JrID0gZm9ya0lPICAgICAgICAgLS0gZm9ya09TIHdv
dWxkIGJlIHRoZSBvdGhlciBjaG9pY2UuCgpmb3JldmVyIDo6IElPICgpIC0+IElPICgpCmZv
cmV2ZXIgeCA9IHNlcXVlbmNlXyAkIHJlcGVhdCB4Cgpmb3IgOjogSW50IC0+IElPICgpIC0+
IElPICgpCmZvciBjb3VudCB4ID0gc2VxdWVuY2VfICQgcmVwbGljYXRlIGNvdW50IHgKCnR5
cGUgSUQgPSBJbnQKZGF0YSBNZXNzYWdlIGEgPSBNIElEIGEKCmFzc2VydCA6OiBCb29sIC0+
IElPICgpCmFzc2VydCBGYWxzZSA9IGVycm9yICJhc3NlcnQgZmFpbGVkIgphc3NlcnQgVHJ1
ZSAgPSByZXR1cm4gKCkKCi0tIFNvbWUgbnVtYmVyIG9mIHByb2Nlc3NlcyBtYWtlIHVwIHRo
ZSByaW5nIG9mIHNsYXZlczoKc2xhdmVwcm9jIGEgYiA9IGZvcmV2ZXIgJCBzbGF2ZXN0ZXAg
YSBiCgpzbGF2ZXN0ZXAgKHNlbmRpZCwgbG9pbiwgaGlpbikgKG15aWQsIGxvb3V0LCBoaW91
dCkgPSBkbwogICAgICAgIGZvciBoaWxvcmF0aW8gJCBzZW5kbXNncyBzZW5kaWQgbXlpZCBo
aWluIGhpb3V0IGxvb3V0CgotLSBUaGUgbWFzdGVyIHByb2Nlc3MgKHRoZSBiZWdpbm5pbmcg
YW5kIGVuZCk6Cm1hc3RlcnByb2MgcnVucyBhQChsYXN0aWQsIGxvaW4sIGhpaW4pIGJAKG15
aWQsIGxvb3V0LCBoaW91dCkgPSBkbwogICAgICAgIHdyaXRlQ2hhbiBoaW91dCAoTSBteWlk
IG1lc3NhZ2UpCgl3cml0ZUNoYW4gbG9vdXQgKE0gbXlpZCBsb3dfcHJpb3JpdHkpCglsZXQg
cnVuc0IgPSBydW5zIC0gMSBpbgoJCWZvciBydW5zQiAkIHNsYXZlc3RlcCBhIGIKCWxhc3Rz
ZW5kIGEgYgoKLS0gU2VuZGluZyBhIG1lc3NhZ2UgaW52b2x2ZXMgd2FpdGluZyB0byBnZXQg
dGhlIG1lc3NhZ2UgZnJvbSB0aGUKLS0gdXBzdHJlYW0gc2xhdmUsIHZlcmlmeWluZyBpdCdz
IHdobyB5b3UgZXhwZWN0IGl0IHNob3VsZCBiZSBmcm9tLAotLSB0aGVuIHBhc3NpbmcgdGhl
IG1lc3NhZ2Ugb24gdG8gdGhlIG5leHQgb25lLgpzZW5kbXNncyBzZW5kaWQgbXlpZCBoaWlu
IGhpb3V0IGxvb3V0ID0gZG8gCiAgICAgICAgTSBzIGQgPC0gcmVhZENoYW4gaGlpbgogICAg
ICAgIGFzc2VydCAkIHNlbmRpZCA9PSBzIAogICAgICAgIHdyaXRlQ2hhbiBoaW91dCAoTSBt
eWlkIGQpCgl3cml0ZUNoYW4gbG9vdXQgKE0gbXlpZCBsb3dfcHJpb3JpdHkpCgpsYXN0c2Vu
ZCAoc2VuZGlkLCBsb2luLCBoaWluKSAobXlpZCwgbG9vdXQsIGhpb3V0KSA9IGRvCglNIHMg
ZCA8LSByZWFkQ2hhbiBoaWluCiAgICAgICAgYXNzZXJ0ICQgc2VuZGlkID09IHMgCiAgICAg
ICAgd3JpdGVDaGFuIGhpb3V0IChNIG15aWQgZCkKCXdyaXRlQ2hhbiBsb291dCAoTSBteWlk
IGxvd19wcmlvcml0eSkKCXJldHVybiBkCgptYWluID0gZG8gfltydW5zXSA8LSBnZXRBcmdz
CiAgICAgICAgICBkb2l0ICQgcmVhZCBydW5zCgpkb2l0IDo6IEludCAtPiBJTyAoKQpkb2l0
IHJ1bnMgPSBkbwogICAgICAgIGxldCBpZHMgPSBbMS4ucHJvY2Vzc2VzXQogICAgICAgIGhp
Y2hhbnMgPC0gc2VxdWVuY2UgJCByZXBsaWNhdGUgcHJvY2Vzc2VzIG5ld0NoYW4KICAgICAg
ICBsb2NoYW5zIDwtIHNlcXVlbmNlICQgcmVwbGljYXRlIHByb2Nlc3NlcyBuZXdDaGFuCiAg
ICAgICAgbGV0IGFyZ3MgPSB6aXAzIGlkcyBoaWNoYW5zIGxvY2hhbnMKICAgICAgICBsZXQg
c2xhdmVwcm9jcyA9IHppcFdpdGggc2xhdmVwcm9jIGFyZ3MgKHRhaWwgYXJncykKICAgICAg
ICBtYXBNIGZvcmsgc2xhdmVwcm9jcwogICAgICAgIGxhc3RfbXNnIDwtIG1hc3RlcnByb2Mg
cnVucyAobGFzdCBhcmdzKSAoaGVhZCBhcmdzKQoJcHV0U3RyIGxhc3RfbXNnCg==
--=_d994c7c4e42e82a79968f22355efaa97--