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