summaryrefslogtreecommitdiffstats
path: root/ps05_pattern_matching/bnewbold_ps05.txt
diff options
context:
space:
mode:
authorbnewbold <bnewbold@eta.mit.edu>2009-03-14 21:00:59 -0400
committerbnewbold <bnewbold@eta.mit.edu>2009-03-14 21:00:59 -0400
commit43fe6667ec5303ecf885c63a18c1568797478cfb (patch)
tree8c173afe4ad10219da675964a39c563705544355 /ps05_pattern_matching/bnewbold_ps05.txt
parentbf7258c23db3e4a942f39b21b37b61315756a132 (diff)
download6.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.txt49
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
+--------------------------------