Size: a a a

2020 July 15

KV

Kirill Valyavin in Haskell
Переслано от Kirill Valyavin
Почему это полезно: потому что можно написать
Haskell> let plusThree = (+) 3
Haskell> map plusThree [1..10]
[4,5,6,7,8,9,10,11,12,13]
источник

KV

Kirill Valyavin in Haskell
Переслано от Kirill Valyavin
Или сразу map (+3) [1..10]
источник

к

кана in Haskell
greelot
И что означает это "не совсем"
функция которая принимает два аргумента не может принимать меньше аргументов

а хаскельные функции принимают ток один аргумент, поэтому можно передавать сколько угодно в каждый нужный момент
источник

JS

Jerzy Syrowiecki in Haskell
кана
все проще, лямбды имеют рантаймное представление, лямбда это пара из ссылку на функцию и среза скоупа в момент создания этой лямбды

f =
 let t = 5
 in \x -> x + t

g =
 let t = 10
 in \x -> x + t

вроде абсолютно две одинаковые лямбды, \x -> x + t, но они имеют разный срез скоупа (+, и t = 5 и 10), поэтому это две разные в рантайме лямбды, и мы можем вызвать f 2 и получить 7, хоть уже нет у нас t в скоупе, это сохранилось в срезе скоупа лямбды
точнее, замыкание = (окружение, код)
источник

KV

Kirill Valyavin in Haskell
Можно давать не сразу все аргументы, а какой-то отложить
источник

KV

Kirill Valyavin in Haskell
Или несколько
источник

g

greelot in Haskell
Kirill Valyavin
Можно давать не сразу все аргументы, а какой-то отложить
Так да, это тоже самое, что и принятие двух аргументов, только второй принимается чуть позже. Что? Ааааааааа. Все понятно. Бл#дь, с#ка, наконец-то
источник

JS

Jerzy Syrowiecki in Haskell
Jerzy Syrowiecki
точнее, замыкание = (окружение, код)
в языках с ФП функция = замыкание. в языках без ФП функция = код
источник

KV

Kirill Valyavin in Haskell
greelot
Так да, это тоже самое, что и принятие двух аргументов, только второй принимается чуть позже. Что? Ааааааааа. Все понятно. Бл#дь, с#ка, наконец-то
Поздравляю!
источник

g

greelot in Haskell
Kirill Valyavin
Поздравляю!
2+2 только что посчитал
источник

g

greelot in Haskell
Это просто, но чтобы это понять, я пошел все усложнять, простая логика превратилась в ад
источник

g

greelot in Haskell
Хорошо, логику я понял, но до практики я ещё не дошел
источник

g

greelot in Haskell
Щас все переварю
источник

g

greelot in Haskell
greelot
Хорошо, я понимаю так.

Допустим есть функция с типом
(a -> a) -> a

Эта функция, сначала из первого значения типа a делает второе значение типа а, потом первое значение типа a, забывается и испаряется, и уже из полученного второго значения типа а, делается третье значение типа a

Так что-ли?
Ну так правильно все, вот это осмысление было правильным
источник

JC

John Cantrell in Haskell
greelot
Хорошо, я понимаю так.

Допустим есть функция с типом
(a -> a) -> a

Эта функция, сначала из первого значения типа a делает второе значение типа а, потом первое значение типа a, забывается и испаряется, и уже из полученного второго значения типа а, делается третье значение типа a

Так что-ли?
Советую посмотреть видео Дениса Москвина про бестиповое лямбда-исчисление, там всё подробно на пальцах объясняется
источник

g

greelot in Haskell
greelot
Ну так правильно все, вот это осмысление было правильным
Все делается поэтапно
источник

g

greelot in Haskell
Сначала одна функция с одним аргументом выполняется, потом эта же функция выполняется с новым аргументом , а не все сразу выполняется, как кажется
источник

KV

Kirill Valyavin in Haskell
greelot
Ну так правильно все, вот это осмысление было правильным
Там скобки стоят неправильно, обсуждали же выше, в чём разница
источник

JM

Jonn Mostovoy in Haskell
плиз стоп :с
источник

JM

Jonn Mostovoy in Haskell
Jonn Mostovoy
@greelot я очень рекомендую уменьшить гонор, установить на компьютер GHC, взять книгу и эксперементировать с примерами пока идёте по книге. В таком порядке.

И решать упражнения пока не решите.
.
источник