Процедура analyze-require
Если бы мы не догадались, что конструкцию
require
можно реализовать как обычную процедуру с помощью
amb
, так что пользователь сам может определить ее в своей недетерминистской программе, то нам пришлось бы задать эту конструкцию в виде особой формы. Потребовались бы синтаксические процедуры
(define (require? exp) (tagged-list? exp 'require))
(define (require-predicate exp) (cadr exp))
новая ветвь разбора в
analyze
:
((require? exp) (analyze-require exp))
а также процедура
analyze-require
, которая обрабатывает выражения
require
. Допишите следующее определение
analyze-require
:
(define (analyze-require exp)
(let ((pproc (analyze (require-predicate exp))))
(lambda (env succeed fail)
(pproc env
(lambda (pred-value fail2)
(if <??>
<??>
(succeed 'ok fail2)))
fail))))
Комментарии отсутствуют.