Покажите, что невозможно написать процедуру 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?
.
Комментарии отсутствуют.