Code Review

Compare your solutions

    #| Для этого упражнения нет проверок.
Любое решение будет считаться успешным ответом. |#
СИКП: "интерпретатор сначала вычисляет опе-
ратор и операнды, а затем применяет получившуюся процедуру к получившимся ар-
гументам. Но это не единственный способ осуществлять вычисления. Другая модель
вычисления не вычисляет аргументы, пока не понадобится их значение".
Первая модель в цитате выше - (1)апликативная, вторая - (2)нормальная.
(1) В этой модели сначала вычислялись бы операнды процедуры, т.е. аргументы. А второй аргумент - это вызов функции p. 
При ее вычислении она возвращала бы саму себя и так до бесконечности.
(2) В этой модели p не вычисляется, пока не нужно ее значение. Вычисление происходит после того, как завершены все подстановки.  
В процессе подстановки предикат окажется истинным и функция test вернет 0. То есть не возникнет необходимости вычислять (p).