4.3.3. Реализация amb-интерпретатора
Упражнение 4.54

Процедура 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))))

Это упражнение еще никто не завершил. Ты будешь первым!


Комментарии отсутствуют.

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход