Ch5 Nightly 3
We are creating a way to match pattern segments – not just individual
words – using (?* ?x)
. Today you are writing segment-match
, which
takes in a pattern (assumed to begin with a ?*
-pattern) and an input
to match.
Tests
Your code should do at least this much.
(assert-equal (list ('?x . '(the food was)))
(segment-match '((?* ?x) great)
'(the food was great)))
(assert-equal NIL
(segment-match '((?* ?x) terrible)
'(the food was great)))
Eventual Goals
If your code matches more than one pattern, that’s great but it could be a little tricky without reading the book.
(assert-equal (list ('?x . '(really fun)) ('?y . (at the museum)))
(segment-match '(I had a (?* ?x) time (?* ?y) thanks)
'(I had a really fun time at the museum thanks)))
(assert-false (segment-match '(I went (?* ?x) zoo)
'(I went golfing at the park)))
Tools
(position 'x '(a b x c) :start 1)
(subseq '(a b x c) 1 3)