LINUX.ORG.RU

Замыкание и haskell.


0

0

По идее, для замыкания необходима некоторая переменная, с локальной областью видимости. Но насколько можно судить, переменных в хаскел нету как факт, а лишь функции. Отсюда вопрос, возможны ли замыкания в принципе, и если да, то можно какой-нибудь примерчик...

Или какой-нибудь альтернативный метод, что-бы создать какой-либо общий сторедж данных (к примеру список), для накопление в нём данных от 2-х разных потоков?

Переменные в haskell есть, просто они все локальные. Чем функция, которая всегда возвращает одно значение - не переменная?

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

Тем что она всё-таки функция. Пускай и работает так же как переменная. Вернее константа. Но можно ли их как-то переопределять в ран тайм?

Просто единственная идея которой можно сделать простой счётчик, это постоянно передовать его значение в рекурсивно вызываемой функции, что неприятно засоряет код... А как по другому это сделать не сообразить. Быть может через монады... Но понимание их пока не пришло.

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

По поводу деструктивно изменяемой переменной - смотрите документацию по IORef (да, делается через монады :-). А так, как правило деструктивное присваивание не нужно.

rexadecimal
()

А чего непонятного? Уж коли все переменные локальные -- такова судьба. Возьми какой-нибудь let, воткни в определение функции и сделай ее частичное применение -- это и будет замыкание в классическом понимании. Не вижу проблем.

balodja ★★★
()

Переменная в хаскеле, конечно, не может менять значение; но вот её значение при разных вызовах функции - может быть разным.

f n = \m -> n + m

Значение n при вызовах f 1 и f 2 - разное. В результате оно содержится, но неявно. Чем не замыкание?

Miguel ★★★★★
()
Ответ на: комментарий от ryukzak

> Просто единственная идея которой можно сделать простой счётчик, это постоянно передовать его значение в рекурсивно вызываемой функции, что неприятно засоряет код...

MonadState :-)

> Быть может через монады... Но понимание их пока не пришло.

google "All about Monads"

Это описание с примерами использования, в т.ч. и MonadState.

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

> MonadState

Не факт. Возможно, Writer будет лучше.

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