diff options
author | bnewbold <bnewbold@eta.mit.edu> | 2009-03-14 21:00:59 -0400 |
---|---|---|
committer | bnewbold <bnewbold@eta.mit.edu> | 2009-03-14 21:00:59 -0400 |
commit | 43fe6667ec5303ecf885c63a18c1568797478cfb (patch) | |
tree | 8c173afe4ad10219da675964a39c563705544355 /ps05_pattern_matching/bnewbold_ps05.txt | |
parent | bf7258c23db3e4a942f39b21b37b61315756a132 (diff) | |
download | 6.945-43fe6667ec5303ecf885c63a18c1568797478cfb.tar.gz 6.945-43fe6667ec5303ecf885c63a18c1568797478cfb.zip |
partial progress
Diffstat (limited to 'ps05_pattern_matching/bnewbold_ps05.txt')
-rw-r--r-- | ps05_pattern_matching/bnewbold_ps05.txt | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/ps05_pattern_matching/bnewbold_ps05.txt b/ps05_pattern_matching/bnewbold_ps05.txt new file mode 100644 index 0000000..64908a3 --- /dev/null +++ b/ps05_pattern_matching/bnewbold_ps05.txt @@ -0,0 +1,49 @@ +;;; 6.945 Problem Set #5 Comments +;;; 03/11/2009 +;;; Bryan Newbold <bnewbold@mit.edu> + +Note: Problem numbers were totally off! Jeez! ;) + +Problem 5.1: Multiple Matches +-------------------------------- +The multiple suceeds are due to the looping let expression ("lp") in +match:segment. The first segement match attempt is with n=0, which is why the +first succeed statement has x null. This is a valid match with y equaling +(b b b b b b), so the success procedure is called and this match printed, but +then the failure causes evaluation to drop back to "lp", with n now incremented +to 1, and the process continutes until n=4, which has no matches at all and +the #f thunks all the way down to the floor. + +Problem 5.2: Multiple Matches +-------------------------------- +I allowed match:element declarations to have an optional predicate; the +procedure corresponding to the predicate symbol is pulled from the nearest repl +environment. A problem with my implementation is that the predicate is only +checked for the first reference to the variable; if the predicate is different +or only specified in one of the later references, the right thing doesn't +happen. Eg, + +((matcher '(a (? b) (? b integer?) c)) + '(a t t c)) +; ((b t)) +; should be #f? + +Also the predicate has to be a simple symbol existing in the environmnet, +instead of a lambda expression, maybe I should have used apply? + +[see code in bnewbold_ps05_work.scm] + +Problem 5.3: Multiple Match Implementation +-------------------------------- +Ugh, I should really read these problem sets through the whole way first. See +implementation above, a somewhat ugly method. + +Problem 5.4: ?:choice +-------------------------------- +[see code in bnewbold_ps05_work.scm] + +Problem 5.5: ?:pletrec, ?:ref +-------------------------------- + +Problem 5.5: restrict +-------------------------------- |