trying to tie the knot

Hal Daume III hdaume@ISI.EDU
Fri, 12 Apr 2002 10:26:21 -0700 (PDT)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-33463914-1018632381=:22333
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi All,

I thought I was starting to get my head around the whole tying the knot
phenomenon, but when my program produced "*** Exception: <<loop>>" I
figured I was probably missing something :).

Here's what I'm trying to do (I know I could do it without tying the knot,
but that seemed like a reasonable approach and I wanted to get my hands
dirty or feat wet):

I'm reading in a file; that is I have a function String ->
MyDataType.  More specifically I'm reading in a Tree, and the tree is
specified in the file with these "Subtree" fields.  So you can be reading
along in the tree and then instead of actually seeing a branch or leaf,
you'll see somethign like "[S1]" which means "stick subtree S1 in
here".  later in the file (arbitrarily later), you will see something like
"Subtree [S1]" and then following that is that tree.

So what I did was I changed my function to a String -> [(String,Tree)] ->
(Tree, [(String,Tree)] function where the list is a lookup for the
subtrees.  I then said:

readTrees s = let (t, st) = readTrees' s st in t

and then the readTrees' basically read the tree in as normal; except when
it gets to something like "[S1]" it does lookup "[S1]" subTrees to get the
subtree and then when it gets to "Subtree [S1]" it reads in the subtree
and then adds it to the subtree list.

Is this not an appropriate use of tying the knot or amd I just doing
something wrong?  I've attached my code if you want to read it; It's
marginally more complex that I've written here jsut because of some of the
idiosyncracies in the file format...

 - Hal

--
Hal Daume III

 "Computer science is no more about computers    | hdaume@isi.edu
  than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume

---559023410-33463914-1018632381=:22333
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="DecisionTree.hs"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.21.0204121026210.22333@moussor.isi.edu>
Content-Description: 
Content-Disposition: attachment; filename="DecisionTree.hs"

bW9kdWxlIERlY2lzaW9uVHJlZQ0KICAgIHdoZXJlDQoNCmltcG9ydCBJTw0K
aW1wb3J0IExpc3QNCg0KZGF0YSBEZWNpc2lvblRyZWUgDQogICAgPSBUZXN0
IFN0cmluZyBTdHJpbmcgU3RyaW5nIERlY2lzaW9uVHJlZSBEZWNpc2lvblRy
ZWUNCiAgICB8IFZhbHVlIFN0cmluZyBEb3VibGUgRG91YmxlDQogICAgZGVy
aXZpbmcgKFNob3csIEVxLCBPcmQsIFJlYWQpDQoNCnJlYWREZWNpc2lvblRy
ZWUgOjogU3RyaW5nIC0+IERlY2lzaW9uVHJlZQ0KcmVhZERlY2lzaW9uVHJl
ZSBzID0gDQogICAgbGV0IChfLCB3aG9sZVRyZWUsIHN1YlRyZWVzKSA9IHJl
YWREZWNpc2lvblRyZWUnIEZhbHNlIHN1YlRyZWVzIChmaWx0ZXIgKC89W10p
IChsaW5lcyBzKSkNCiAgICBpbiAgd2hvbGVUcmVlDQoNCnJlYWREZWNpc2lv
blRyZWUnIDo6IEJvb2wgLT4gWyhTdHJpbmcsRGVjaXNpb25UcmVlKV0gLT4g
W1N0cmluZ10gLT4gKFtTdHJpbmddLCBEZWNpc2lvblRyZWUsIFsoU3RyaW5n
LERlY2lzaW9uVHJlZSldKQ0KcmVhZERlY2lzaW9uVHJlZScgXyBzdWJUcmVl
cyBbXSA9IChbXSwgVmFsdWUgIiIgMCAwLCBzdWJUcmVlcykNCnJlYWREZWNp
c2lvblRyZWUnIGFyZVZhbHVlIHN1YlRyZWVzICh4OnhzKSA9DQogICAgbGV0
IChsaW5lRGVwdGgsIGxpbmVUeXBlLCB2YWx1ZXMnKSA9IHJlYWRMaW5lIHgN
CglzdWJUcmVlc1ggPSBpZiB4cyAvPSBbXSAmJiAiU3VidHJlZSIgYGlzUHJl
Zml4T2ZgIGhlYWQgeHMNCgkJICAgICAgdGhlbiByZWFkU3ViVHJlZXMgc3Vi
VHJlZXMgeHMNCgkJICAgICAgZWxzZSBzdWJUcmVlcw0KCSh4cycsICAgbGhz
LCAgIHN1YlRyZWVzJykgICA9IHJlYWREZWNpc2lvblRyZWUnIEZhbHNlIHN1
YlRyZWVzWCAgeHMNCgkoeHMnJyAsIHJocywgICBzdWJUcmVlcycnKSAgPSBy
ZWFkRGVjaXNpb25UcmVlJyBGYWxzZSBzdWJUcmVlcycgeHMnDQoJKHhzJycn
LCBvdGhlciwgc3ViVHJlZXMnJycpID0gcmVhZERlY2lzaW9uVHJlZScgVHJ1
ZSAgc3ViVHJlZXNYICB4cw0KCXZhbHVlcyA9IHZhbHVlcycgKysgWyIwLjAi
XQ0KICAgIGluICBpZiBsaW5lVHlwZSAgIC0tIGFyZSB3ZSBhIHZhbHVlDQoJ
ICB0aGVuIGlmIGFyZVZhbHVlDQoJCSB0aGVuICh4cywgICAgVmFsdWUgKHZh
bHVlcyAhISAzKSAocmVhZCAodmFsdWVzICEhIDQpKSAocmVhZCAodmFsdWVz
ICEhIDUpKSwgc3ViVHJlZXNYKQ0KCSAgICAgICAgIGVsc2UgKHhzJycnLCBU
ZXN0ICh2YWx1ZXMgISEgMCkgKHZhbHVlcyAhISAxKSAodmFsdWVzICEhIDIp
IA0KCQkgICAgICAgICAgICAgICAgKFZhbHVlICh2YWx1ZXMgISEgMykgKHJl
YWQgKHZhbHVlcyAhISA0KSkgKHJlYWQgKHZhbHVlcyAhISA1KSkpDQoJCSAg
ICAgICAgICAgICAgICBvdGhlciwNCgkgICAgICAgICAgICAgICBzdWJUcmVl
cycnJykNCgkgIGVsc2UgaWYgJ1snID09IGhlYWQgKGxhc3QgdmFsdWVzJykg
ICAtLSBhcmUgd2UgYSBzdWJ0cmVlPw0KCSAgICAgICAgIHRoZW4gY2FzZSBs
b29rdXAgKGxhc3QgdmFsdWVzJykgc3ViVHJlZXNYIG9mDQoJCSAgICAgICAg
Tm90aGluZyAtPiBlcnJvciAiY291bGQgbm90IGZpbmQgc3VidHJlZSINCgkJ
ICAgICAgICBKdXN0IGR0IC0+ICh4cycnLCBUZXN0ICh2YWx1ZXMgISEgMCkg
KHZhbHVlcyAhISAxKSAodmFsdWVzICEhIDIpIGR0IGxocywgc3ViVHJlZXMn
KQ0KCQkgZWxzZSAoeHMnJywgVGVzdCAodmFsdWVzICEhIDApICh2YWx1ZXMg
ISEgMSkgKHZhbHVlcyAhISAyKSBsaHMgcmhzLCBzdWJUcmVlcycnKQ0KDQpy
ZWFkU3ViVHJlZXMgc3ViVHJlZXMgW10gPSBzdWJUcmVlcw0KcmVhZFN1YlRy
ZWVzIHN1YlRyZWVzICh4OnhzKQ0KICAgIHwgIlN1YnRyZWUiIGBpc1ByZWZp
eE9mYCB4ID0NCglsZXQgbmFtZSA9ICh3b3JkcyB4KSAhISAxDQoJICAgIHRy
ZWVEZWYgPSB0YWtlV2hpbGUgKFx4IC0+IG5vdCAoIlN1YnRyZWUiIGBpc1By
ZWZpeE9mYCB4KSkgeHMNCgkgICAgcmVzdCAgICA9IGRyb3BXaGlsZSAoXHgg
LT4gbm90ICgiU3VidHJlZSIgYGlzUHJlZml4T2ZgIHgpKSB4cw0KCSAgICAo
XywgdGhpc0RULCBfKSA9IHJlYWREZWNpc2lvblRyZWUnIEZhbHNlIHN1YlRy
ZWVzIHRyZWVEZWYNCglpbiAgcmVhZFN1YlRyZWVzICgobmFtZSx0aGlzRFQp
OnN1YlRyZWVzKSB4cw0KDQpyZWFkTGluZSA6OiBTdHJpbmcgLT4gKEludCxC
b29sLFtTdHJpbmddKSAgLS0gVHJ1ZSA9IFZhbHVlLCBGYWxzZSA9IFRlc3QN
CnJlYWRMaW5lIHMgPSAobGVuZ3RoIChlbGVtSW5kaWNlcyAnfCcgcyksICcp
JyBgZWxlbWAgcywgdmFscykNCiAgICB3aGVyZSB2YWxzID0gd29yZHMgJA0K
CQkgbWFwIChceCAtPiBpZiB4IGBlbGVtYCAiOigpLyIgdGhlbiAnICcgZWxz
ZSB4KSAkDQoJCSBkcm9wV2hpbGUgKGBlbGVtYCAifCAiKSBzDQoNCnNpbXBs
ZURUID0gDQogICBbImxvY2FsRGVmQ291bnRTdW0gPD0gNCA6IHAgKDEwMS4w
LzYuMCkiLA0KICAgICJsb2NhbERlZkNvdW50U3VtID4gNCA6IHUgKDcuMCki
XQ0KDQpzaW1wbGVEVDIgPSBbDQogICAgImlzQXJndW1lbnQwID0gdDogdSAo
MzMuMC8xLjQpIiwNCiAgICAiaXNBcmd1bWVudDAgPSBmOiIsDQogICAgInwg
ICBpc0FyZ3VtZW50MSA9IGY6IHUgKDkuMC8xLjMpIiwNCiAgICAifCAgIGlz
QXJndW1lbnQxID0gdDoiLA0KICAgICJ8ICAgfCAgIGlzUmVjdXJzaXZlMSA9
IHQ6IHMgKDk0NS4wLzM5LjgpIiwNCiAgICAifCAgIHwgICBpc1JlY3Vyc2l2
ZTEgPSBmOiB1ICgyLjAvMS4wKSJdDQoNCnstDQpUZXN0ICJpc0FyZ3VtZW50
MCIgIj0iICJ0IiANCiAgKFZhbHVlICJ1IiAzMy4wIDEuNCkgDQogIChUZXN0
ICJpc0FyZ3VtZW50MCIgIj0iICJmIiANCiAgICAoVGVzdCAiaXNBcmd1bWVu
dDEiICI9IiAiZiIgDQogICAgICAoVmFsdWUgInUiIDkuMCAxLjMpIA0KICAg
ICAgKFRlc3QgImlzQXJndW1lbnQxIiAiPSIgInQiIA0KICAgICAgICAoVGVz
dCAiaXNSZWN1cnNpdmUxIiAiPSIgInQiIA0KICAJICAoVmFsdWUgInMiIDk0
NS4wIDM5LjgpIA0KCSAgKFZhbHVlICJ1IiAyLjAgMS4wKSkgDQoJKFZhbHVl
ICIiIDAuMCAwLjApKSkgDQogICAgKFZhbHVlICIiIDAuMCAwLjApKQ0KLX0N
Cg0Kc2ltcGxlRFQzID0gWw0KICAgICJpc0FyZ3VtZW50MCA9IHQ6IHUgKDMz
LjAvMS40KSIsDQogICAgImlzQXJndW1lbnQwID0gZjoiLA0KICAgICJ8ICAg
aXNBcmd1bWVudDEgPSBmIDpbUzFdIiwNCiAgICAifCAgIGlzQXJndW1lbnQx
ID0gdDoiLA0KICAgICJ8ICAgfCAgIGlzUmVjdXJzaXZlMSA9IHQ6IHMgKDk0
NS4wLzM5LjgpIiwNCiAgICAifCAgIHwgICBpc1JlY3Vyc2l2ZTEgPSBmOiB1
ICgyLjAvMS4wKSIsDQogICAgIiIsDQogICAgIlN1YnRyZWUgW1MxXSIsDQog
ICAgIiIsDQogICAgImxvY2FsRGVmQ291bnQgPD0gMTUgOiB1ICgyODEuMC8x
LjQpIiwNCiAgICAibG9jYWxEZWZDb3VudCA+IDE1IDogcyAoMTM5LjAvMTEu
OCkiXQ0K
---559023410-33463914-1018632381=:22333--