[plt-scheme] Bridging the gap: Language needed
One person already asked in private for help running the code.
It needs language "Pretty Big".
I have to update myself on R6RS, DrScheme 4.X module and #lang stuff.
Until then, I'll mention more for ambtious readers who might read it:
(define (?) (error "No."))
(define-syntax -<
(syntax-rules ()
((-<) (?))
((-< <e0> . <es>)
(let ((old-fail ?))
(let/cc resatisfy
(set! ? (lambda () (set! ? old-fail) (resatisfy (-< . <es>))))
<e0>)))))
The error procedure is not R5RS standard.
It's used here to abort somewhat cleanly to the Interactions pane (REPL)
when there are no more branches. You could explore display:
(define (?) (display "No."))
Also, saved versions of it are called old-fail because originally ? was called fail.
In other words, they are "fail this branch and try next branch", but except
for some Prolog students people liked "?" better, as a kind of "next?".
let/cc is a common non-R5RS syntax:
(define-syntax let/cc
(syntax-rules ()
((let/cc <continuation-name> . <body>)
(call-with-current-continuation (lambda (<continuation-name>) . <body>)))))
And apparently I'm not supposed to be using set! on (just?) top-level define'd names.