четверг, 26 сентября 2013 г.

Substitution Model

 Элементы програмирования

Любой нетривиальный язык программирования имеет:
1) элементарные выражения, представляющие наиболее простые элементы.
2) способы комбинирования первых.
3) механизм для абстрагирования сложных и комбинированных выражений под одним именем.

В Scala все выражения, и любое выражение должно превратиться в конце концов в конкретное значение.  В Scala за это отвечает  Substitution Model, задача этого модуля, циклически выполнять вложенные выражения в друг друга, пока из них не останется конкретное значение.

В функциональном программировании есть две стратегии выполнения(Evaluation Strategy)
1) Call By Value
2) Call By Name

Каждая из стратегий выгодна в разных конкретных случаях. Но чаще всего Scala используется СBV, в большинстве случаев этого оправдано.

Но когда в случае

def someOperation(x: Int, y: Int): Int = 1

someOperation(1+2, loop)

Мы зациклимся на втором шаге. Но если второму параметру применить стратегию оценки  СBN, то міы спокойно пройдем программу

Чтобы сменить дефолтовую стратегию на  СBN,  нужно интересуемый параметр объявить:
x: Int -  СBV
x:=> Int -  СBN


Поэтому предыдущее объявленеи нужно подредактировать:
def someOperation(x: Int, y: => Int): Int = 1

someOperation(1+2, loop)// так бесконечного цикла не будет
В зависимости от реализации функции может быть более выгодной та или иная стратегия.

Комментариев нет:

Отправить комментарий