История изменений
Исправление
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 - это не сложнее.