LINUX.ORG.RU

Порядок вычислений в ФП

 


0

2

Допустим, у нас есть объект(актор), который отвечает на 2 сообщения — foo и bar, возвращая, соответственно, 1 и 2. Далее, мы пишем функцию, которая асинхронно отсылает оба сообщения объекту, и возвращает фьючер, который связывается с переменной. Пусть будет такой псевдокод:

test = function(){returnFirstReceivedFutureOf(object.asyncSend(foo), object.asyncSend(bar))}
aFuture1 = test()
aFuture2 = test()
aFuture3 = test()
Каковы будут значения aFuture1, aFuture2, aFuture3? Любые, в диапазоне 111-222. Мы сколько угодно можем вызывать test, и всегда будем непредсказуемый результат, возможно всегда один и тот же, возможно, всегда разный.

Обратите внимание, тут нет никаких сайд-эффектов. Однако, функция может вернуть разный результат, при разных вызовах. Это происходит по одной простой причине: мы не знаем, какое из сообщений придет первым, foo или bar.

Все это означает следующее: в данной (недетерминистской) программе, отсутствует глобальное состояние вычисления, и, как следствие, тут нет никакой последовательности шагов.

BY CONTRAST

В функциональном программировании, функция всегда возвращает одно и то же. Значит, такая программа, как написана выше, там невозможна. Тогда о каком отсутствии порядка вычислений может идти речь? Ведь многие утверждают, что в ФП он отсутствует. Если порядок вычислений отсутствует, то почему же возвращается всегда одно и то же?



Последнее исправление: javaQest (всего исправлений: 2)
Ответ на: комментарий от Deleted

В какой именно семантике?

У LC нету никакой семантики. Это просто язык (набор термов построенных по определенным правилам), отношение эквивалентности на них и выделенное множество нормализованных термов.

anonymous
()
Ответ на: комментарий от Deleted

В естественной

Это что-то новенькое.

anonymous
()
Ответ на: комментарий от Deleted

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

anonymous
()
Ответ на: комментарий от anonymous

а бета-эквивалентность (и еще ряд других эквивалентностей)

а факториал 5 эквивалентен факториал 4?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.