You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sicp-all-tasks/sicp/4_002e76

71 lines
1.3 KiB

Exercise 4.76: Our implementation of and
as a series combination of queries (Figure 4.5) is elegant, but it is
inefficient because in processing the second query of the and we must
scan the data base for each frame produced by the first query. If the data
base has
n
elements, and a typical query produces a number of output frames
proportional to
n
(say
n
/
k
), then scanning the data base for each
frame produced by the first query will require
n
2
/
k
calls to the
pattern matcher. Another approach would be to process the two clauses of the
and separately, then look for all pairs of output frames that are
compatible. If each query produces
n
/
k
output frames, then this means
that we must perform
n
2
/
k
2
compatibility checks—a factor of
k
fewer than the number of matches required in our current method.
Devise an implementation of and that uses this strategy. You must
implement a procedure that takes two frames as inputs, checks whether the
bindings in the frames are compatible, and, if so, produces a frame that merges
the two sets of bindings. This operation is similar to unification.