Parsing Functions
The parser works by recursive descent, but with the ability to fail and back up and try another path.
; $$ $1 $2
; (loc -> (in (city)) (restrict 'city $2))
(defn locfn []
(saveptr)
(let [$1 (and (= atnword (quote in)) atnword)]
(if $1
(do (nextword)
(let [$2 (wordcat (quote city))]
(if $2
(do (nextword)
(success)
(restrict (quote city) $2))
(fail))))
(fail))))
The program performs (saveptr) on entry and either (success) or (fail) before leaving.