dead_inside_pudge

Пользователь

Регистрация: 24.05.2019

Сообщения: 981

Рейтинг: 540

dead_inside_pudge

Регистрация: 24.05.2019

Сообщения: 981

Рейтинг: 540

Анон, помоги пожалуйста с порядком вычисление в Лиспе:

Упражнение 1.6.

Лиза П. Хакер не понимает, почему if должна быть особой формой. «Почему нельзя просто определить ее как обычную процедуру с помощью cond?» -спрашивает она. Лизина подруга Ева Лу Атор утверждает, что, разумеется, можно, и определяет новую версию if:

(define (new-if predicate then-clause else-clause)

(cond (predicate then-clause)

(else else-clause)))

Ева показывает Лизе новую программу:

(new-if (= 2 3) 0 5)

5

(new-if (= 1 1) 0 5)

0

Обрадованная Лиза переписывает через new-if программу вычисления квадратного корня:

(define (sqrt-iter guess x)

(new-if (good-enough? guess x)

guess

(sqrt-iter (improve guess x)

x)))

Что получится, когда Лиза попытается использовать эту процедуру для вычисления квадратных корней? Объясните.

Насколько я понял порядок вычисления при if будет такой:

https://pastebin.com/4aeQ8ZzZ

А при new-if как он будет выглядеть? До пункта 14 дойдет, а дальше как? Я знаю что дальше он зависнет в результате рекурсии (гуглил), но как это будет выглядеть?

Kromsalo

Пользователь

Регистрация: 13.11.2017

Сообщения: 945

Рейтинг: 245

Kromsalo

Регистрация: 13.11.2017

Сообщения: 945

Рейтинг: 245

бесконечная рекурсия будет, возможно, с ошибкой интерпретатора. забей на это говно мамонта, потому что оно больше нигде не используется и в жизни тебе не пригодится. такой же смысл, как если бы в каком-нибудь авиастроительном техникуме, ты бы изучал паровые котлы...

dead_inside_pudge

Пользователь

Регистрация: 24.05.2019

Сообщения: 981

Рейтинг: 540

dead_inside_pudge

Регистрация: 24.05.2019

Сообщения: 981

Рейтинг: 540

Kromsalo сказал(а):

бесконечная рекурсия будет, возможно, с ошибкой интерпретатора. забей на это говно мамонта, потому что оно больше нигде не используется и в жизни тебе не пригодится. такой же смысл, как если бы в каком-нибудь авиастроительном техникуме, ты бы изучал паровые котлы...

Нажмите, чтобы раскрыть...

У меня друг бати рассказывал, что когда он учился на человека который машины собирает, то им объясняли строение парового двигателя

Kromsalo

Пользователь

Регистрация: 13.11.2017

Сообщения: 945

Рейтинг: 245

Kromsalo

Регистрация: 13.11.2017

Сообщения: 945

Рейтинг: 245

dead_inside_pudge сказал(а):

У меня друг бати рассказывал, что когда он учился на человека который машины собирает, то им объясняли строение парового двигателя

Нажмите, чтобы раскрыть...

но не рассказал, пригодилось ли это ему...

p.s. вас бы еще заставляли понимать какой-нибудь фортран и что-нибудь еще более древнее...

Lambda-chan

Пользователь

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8642

Lambda-chan

Регистрация: 26.07.2012

Сообщения: 4615

Рейтинг: 8642

Разница между cond и if в scheme в том, что при вычислении if необязательно вычислять оба аргумента, в отличие от обычной функции. В этом примере разница в вычислениях будет после того пункта, когда good-enough? начинает возвращать #t для guess. Тогда if и new-if должны будут вернуть свои первые аргументы, if сможет это сделать, не вычисляя второй аргумент, new-if - нет, придется выполнять бесполезные вычисления, которые никогда не закончатся (вернее, пока не закончится стек).