Покажите, что невозможно написать процедуру halts?

Если даны одноаргументная процедура p и объект a , то говорят, что p «останавливается» на a , если выражение (p a) возвращает значение (а не печатает сообщение об ошибке или выполняется вечно). Покажите, что невозможно написать процедуру halts? , которая бы точно определяла для любой процедуры p и любого объекта a , останавливается ли p на a . Используйте следующее рассуждение: если бы имелась такая процедура halts? , можно было бы написать следующую программу:

(define (run-forever) (run-forever))

(define (try p)
  (if (halts? p p)
      (run-forever)
      'halted))

Теперь рассмотрите выражение (try try) и покажите, что любое возможное завершение (остановка или вечное выполнение) нарушает требуемое поведение halts? .


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

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

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

Вход