LINUX.ORG.RU

История изменений

Исправление twinpeaks, (текущая версия) :

anonymous (23.11.21 22:59:55)

ну и чем оно отличается от… где изменение состояния ?

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

int i = 0;

int foo() {
  return i++;
}

У тебя результат будет отличаться из-за инкремента. В pure functional lang, как Haskell - не будет такого, ибо в чисто-функциональном lang побочные эффекты вроде i++ запрещены по дизайну. Таким образом, вывод функции должен зависеть только от значения ее аргументов. Например, если в Haskell есть функция foo с типом Int -> Int, то можно быть уверенным, что «foo 3» всегда будет возвращать одно и то же целое число при каждом вызове.

anonymous (23.11.21 22:59:55)

и тут такая кложура с recur вылезает и смеётся

Не знаю, что в Clojure. Я лично только с Haskell возился более-менее. Был у меня период, когда два месяца на нем писал.

anonymous (23.11.21 22:59:55)

ну так погоди, если меняется состояние - программировать, по идее, становится сложнее, потому что мало написать, так ещё надо проконтролировать, что ничего не крякнется

Да, надо контроллировать. Но, не стал бы употреблять слово «сложнее», скорее «геморойнее». Концепции в Haskell с монадами - вот это сложнее. Или, как правильно с многопоточностью работать. А понимать, что необходимо контроллировать state - это не сложнее.

Исправление twinpeaks, :

anonymous (23.11.21 22:59:55)

ну и чем оно отличается от… где изменение состояния ?

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

int i = 0;

int foo() {
  return i++;
}

У тебя результат будет отличаться из-за инкремента. В pure functional lang, как Haskell - не будет такого, ибо в чисто-функциональном lang побочные эффекты вроде i++ запрещены по дизайну. Таким образом, вывод функции должен зависеть только от значения ее аргументов. Например, если в Haskell есть функция foo с типом Int -> Int, то можно быть уверенным, что «foo 3» всегда будет возвращать одно и то же целое число при каждом вызове.

anonymous (23.11.21 22:59:55)

и тут такая кложура с recur вылезает и смеётся

Не знаю, что в Clojure. Я лично только с Haskell возился более-менее. Был у меня период, когда два месяца на нем писал.

anonymous (23.11.21 22:59:55)

ну так погоди, если меняется состояние - программировать, по идее, становится сложнее, потому что мало написать, так ещё надо проконтролировать, что ничего не крякнется

Да, надо контроллирвоать. Но, не стал бы употреблять слово «сложнее», скорее «геморойнее». Концепции в Haskell с монадами - вот это сложнее. Или, как правильно с многопоточностью работать. А понимать, что необходимо контроллировать state - это не сложнее.

Исходная версия twinpeaks, :

anonymous (23.11.21 22:59:55)

ну и чем оно отличается от… где изменение состояния ?

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

int i = 0;

int foo() {
  return i++;
}

У тебя результат будет отличаться из-за инкремента. В pure functional lang, как Haskell - не будет такого, ибо в чисто-функциональном lang побочные эффекты вроде i++ запрещены по дизайну. Таким образом, вывод функции должен зависеть только от значения ее аргументов. Например, если в Haskell есть функция foo с типом Int -> Int, то можно быть уверенным, что «foo 3» всегда будет возвращать одно и то же целое число при каждом вызове.

anonymous (23.11.21 22:59:55)

и тут такая кложура с recur вылезает и смеётся

Не знаю, что в Clojure. Я лично только с Haskell возился более-менее. Был у меня период, когда два месяца на нем писал.

anonymous (23.11.21 22:59:55)

ну так погоди, если меняется состояние - программировать, по идее, становится сложнее, потому что мало написать, так ещё надо проконтролировать, что ничего не крякнется

Да, надо контроллирвоать. Но, не стал бы употреблять слово «сложнее», скорее «геморойнее». Концепции в Haskell с монадами - вот это сложнее. Или, как правильно с многопоточностью работать. А понимать, что необходимо контроллировать state - это не сложнее.