Size: a a a

Сообщество Scheme

2020 October 07

Е

Евгений in Сообщество Scheme
источник

A

Aragaer in Сообщество Scheme
эмм
источник

A

Aragaer in Сообщество Scheme
ща попробую вспомнить
источник

A

Aragaer in Сообщество Scheme
я подозреваю, что в if если условие ложно, то if-clause не вычисляется вообще. А в cond вычисляется
источник

Е

Евгений in Сообщество Scheme
Ну я так понмаю, что да. Но почему в учебнике-то об этом не сказано? Мб я в глаза долблюсь, но вроде внимательно пересмотрел всё с примечаниями — не вижу объяснения. Либо, есть ещё что-то. хз короче. Может, кто-то точно знает
источник

A

Aragaer in Сообщество Scheme
мм, нет, я неправ
источник

A

Aragaer in Сообщество Scheme
Conditional expressions are evaluated as follows. The predicate <p1> is evaluated first. If its value is false, then <p2> is evaluated. If <p2>'s value is also false, then <p3> is evaluated. This process continues until a predicate is found whose value is true, in which case the interpreter returns the value of the corresponding consequent expression <e> of the clause as the value of the conditional expression. If none of the <p>'s is found to be true, the value of the cond is undefined.
источник

A

Aragaer in Сообщество Scheme
а ошибка-то не в этом
источник

A

Aragaer in Сообщество Scheme
дело не в разнице cond и if
источник

A

Aragaer in Сообщество Scheme
дело в том, что у обоих есть "вычислять только если истина"
источник

A

Aragaer in Сообщество Scheme
а у нас тут new-if, которое таким волшебным свойством не обладает
источник

A

Aragaer in Сообщество Scheme
для вызова new-if нужно вычислять и предикат, и успешное условие, и неуспешное. Чтобы отдать в cond, откуда вернется нужное
источник

Н

Никита in Сообщество Scheme
Если ты про этот new-if из задания, то перед тем, как передать все в cond все вычислиться, так как порядок вычисленич
источник

A

Aragaer in Сообщество Scheme
а вот если new-if определить как макрос, который раскроется в cond, то все ок
источник

a

anton in Сообщество Scheme
либо можно квотировать аргументы
источник

A

Aragaer in Сообщество Scheme
а там внутри эвалить
источник

Е

Евгений in Сообщество Scheme
понял, спасибо
источник

Е

Евгений in Сообщество Scheme
Я правильно понимаю, что интерпретатор даже не дойдет до подстановки аргументов в improve и average, потому что еще до этого зациклится на вызове sqrt-iter через new-if?
источник

A

Aragaer in Сообщество Scheme
ну чтобы вызвать new-if ему надо вычислить три вещи
- good-enough (не проблема)
- guess (не проблема)
- sqrt-iter (рекурсия)

Прежде чем он пойдет внутрь sqrt-iter, он вычислит improve
источник

A

Aragaer in Сообщество Scheme
так что improve и average будут вычислены
источник