X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=hints%2Fassignment_4_hint_3.mdwn;h=94e2010a8c323137b9c408dabb252fc474d1a4cf;hp=48063d3a785193020bbb93e0c76f191ca080f14f;hb=9e19c6911155ccdac50589b6f16e53a8953451b4;hpb=4cea4f69242f3a229292186c8fa652942f31f8b8 diff --git a/hints/assignment_4_hint_3.mdwn b/hints/assignment_4_hint_3.mdwn index 48063d3a..94e2010a 100644 --- a/hints/assignment_4_hint_3.mdwn +++ b/hints/assignment_4_hint_3.mdwn @@ -1,2 +1,26 @@ -Hints for enumerating a tree's fringe. +Hints for Y1,Y2. + +* Begin by trying to define `X1` and `X2` directly [[assignment 4 hint 3 hint 1]], then once they're working, you can abstract back to a pair of combinators `Y1` and `Y2` that generate `X1` and `X2` for a given pair of arguments `T1` and `T2`. + + You want: + + X1 <~~> T1 X1 X2 and + X2 <~~> T2 X1 X2 + +* X1 is presumably going to have some form like: + + (\elem1 elem2 ... (T1 + (do-something-with-the-elems-to-make-X1) + (do-something-with-the-elems-to-make-X2) + )) + some-elem1 some-elem2 ... + + Right? What will the form of X2 be? + +* Can you see how to go on? + +* Call the displayed abstract above `(\elem1 elem2 ... (...))` "elem0". What's the relation between `X1`, `elem0`, `elem1`, `elem2`...? + +* Go on, now you can do it. +