
Denis
28.07.2017
18:09:53
в ленивых язках нет
вроде
а не
но только не все, а что надо для take

Google

Denis
28.07.2017
18:24:56

illiatshurotshka❄️
28.07.2017
18:25:09
сложно

Denis
28.07.2017
18:25:25
ну функция от 3 потом от 1

illiatshurotshka❄️
28.07.2017
18:25:34
а

Denis
28.07.2017
18:25:41
а сиси вот
(.).(.) :: (b -> c) -> (a1 -> a -> b) -> a1 -> a -> c

illiatshurotshka❄️
28.07.2017
18:25:55
а как запилить три, потом два, потом один?

Denis
28.07.2017
18:25:55
от 2 а потом от 1
у джина спроси)

illiatshurotshka❄️
28.07.2017
18:26:14
че за джин

Denis
28.07.2017
18:26:15
это назвается процесс инхабитации
восстановление функции по ее сигнатуре
https://hackage.haskell.org/package/djinn

Google

illiatshurotshka❄️
28.07.2017
18:27:11
о
спасибо

Denis
28.07.2017
18:27:46
ну еще есть варинт программирования на дырках

illiatshurotshka❄️
28.07.2017
18:29:05
хм, слышал про такое в идрисе
оно есть в хаскеле?

Denis
28.07.2017
18:29:33
в агде это раньше было

illiatshurotshka❄️
28.07.2017
18:29:52
о

Denis
28.07.2017
18:35:42
о
Djinn> f ? a -> a
f :: a -> a
f a = a
Djinn> f ? (b -> c) -> (a -> b) -> a -> c
f :: (b -> c) -> (a -> b) -> a -> c
f a b c = a (b c)
Djinn> f ? (b -> c) -> (a -> a1 -> b) -> a -> a1 -> c
f :: (b -> c) -> (a -> a1 -> b) -> a -> a1 -> c
f a b c d = a (b c d)
Djinn> f ? (b -> c) -> (a -> a1 -> a2 -> b) -> a -> a1 -> a2 -> c
f :: (b -> c) -> (a -> a1 -> a2 -> b) -> a -> a1 -> a2 -> c
f a b c d e = a (b c d e)
continuation)
Djinn> type C a = (a -> r) -> r
Djinn> returnC ? a -> C a
returnC :: a -> C a
returnC x1 x2 = x2 x1
Djinn> bindC ? C a -> (a -> C b) -> C b
bindC :: C a -> (a -> C b) -> C b
bindC x1 x2 x3 = x1 (\ c15 -> x2 c15 (\ c17 -> x3 c17))
Djinn> callCC ? ((a -> C b) -> C a) -> C a
callCC :: ((a -> C b) -> C a) -> C a
callCC x1 x2 = x1 (\ c15 _ -> x2 c15) (\ c11 -> x2 c11)
есть еще одна штука
ща вспомню
во! https://github.com/lspitzner/exference
а в общем это называется инхабитация


kana
28.07.2017
18:51:14

Denis
28.07.2017
18:57:57
а как запилить три, потом два, потом один?
фух!
f :: (c1 -> c2) -> (d -> e -> c1) -> (a -> b -> c -> d) -> a -> b -> c -> e -> c2
f a b c d e f g = a (b (c d e f) g)
f (\x -> x + 10) (\x y -> x * y) (\x y z -> x + y + z) 10 20 30 40 50 60 70
2410

illiatshurotshka❄️
28.07.2017
18:58:30
офигеть

Denis
28.07.2017
18:58:53
теперь осталось поинт фри
ахаха

Google

Denis
28.07.2017
18:59:18
f = ((((const .) .) .) .) . (. flip (flip . ((flip . ((flip . (ap .)) .)) .) . (.) . (.) . (.)) id) . (.) . (.) . (.) . (.)

andretshurotshka?❄️кде
28.07.2017
18:59:32
лол

illiatshurotshka❄️
28.07.2017
18:59:42
найс

kana
28.07.2017
18:59:47
Генерация таких функций - не самое интересно, было бы интереснее, если бы он часть выражал через известные функции типа композиции
Или комбинаторы хотя бы

Denis
28.07.2017
19:00:30

illiatshurotshka❄️
28.07.2017
19:01:49
которая берет 4 потом 3 [...]
а нет
f = ((((const .) .) .) .) . (. flip (flip . ((flip . ((flip . (flip .)) .)) .) . (. flip (flip . ((flip . (flip .)) .) . (. flip (flip . (flip .) . flip flip id . (ap .)) h) . (.) . (.)) i) . (.) . (.) . (.)) j) . (.) . (.) . (.) . (.)

Denis
28.07.2017
19:02:24
сисек много

Сергей
29.07.2017
00:27:32

andretshurotshka?❄️кде
29.07.2017
00:28:58
магия

illiatshurotshka❄️
29.07.2017
14:10:29
так
параморфизм это фолд но есть доступ ко всей структуре?

Vadim
29.07.2017
18:52:30
Можно ли методами рамда сделать это же?
const fn = a => () => inc(a);
const futureCall = fn(5);
futureCall() //=> 6
Типа кэрринга, но для функции с одним аргументом, типа inc.

illiatshurotshka❄️
29.07.2017
18:54:42
зачем?

Vadim
29.07.2017
18:56:09
Какие примитивные утилитарные вопросы )

Google

Vadim
29.07.2017
19:01:15
Нашел:
const fn = compose(always, inc);
const futureCall = fn(5);
futureCall() //=> 6
Хотя нет, не то. Нужно что б вычисление выполнилось именно в момент финального вызова

andretshurotshka?❄️кде
29.07.2017
19:09:24
partial?

Vadim
29.07.2017
19:10:41
Вот блин, знаю же все методы, а в голове в нужный момент не всплывают )
В итоге так: compose(partial(inc), of)(5)() //=> 6

illiatshurotshka❄️
29.07.2017
19:30:40
дано [1,2,3,4,1,2,4,5,1,2,4] получить [[1,2,3,4],[1,2,4,5],[1,2,4]] найти закономерность и обобщить написавши метод
а какое решение для этого в хаскеле?

Vadim
29.07.2017
20:06:41
дано [1,2,3,4,1,2,4,5,1,2,4] получить [[1,2,3,4],[1,2,4,5],[1,2,4]] найти закономерность и обобщить написавши метод
groupWith(lt, [1,2,3,4,1,2,4,5,1,2,4]); //=> [[1, 2, 3, 4], [1, 2, 4, 5], [1, 2, 4]]

Admin
ERROR: S client not available

illiatshurotshka❄️
29.07.2017
20:11:37
а в хаскеле groupBy
хмм

Vadim
29.07.2017
22:20:38
Раз уж напомнили о тех задачках, то я тут еще попрактиковался )
frequency([1,2,1,2,4,2,1]) // => [[1,1],[2,1],[1,2],[2,2],[4,1],[2,3],[1,3]]
const frequency = o(nth(1), mapAccum((acc, val) => {
const getIncreasedVal = o(inc, propOr(0, val))
const getAccumPair = juxt([assoc(val, __, acc), pair(val)]);
return o(getAccumPair, getIncreasedVal)(acc)
}, {}
));
frequency([1,2,1,2,4,2,1]); //=> [[1, 1], [2, 1], [1, 2], [2, 2], [4, 1], [2, 3], [1, 3]]
Может есть и более краткое решение на рамде, но я пока не нашел

andretshurotshka?❄️кде
29.07.2017
22:22:24
const frequency = o(nth(1), mapAccum((acc, val) => {
const getIncreasedVal = o(inc, propOr(0, val))
const getAccumPair = juxt([assoc(val, __, acc), pair(val)]);
return o(getAccumPair, getIncreasedVal)(acc)
}, {}
));
frequency([1,2,1,2,4,2,1]); //=> [[1, 1], [2, 1], [1, 2], [2, 2], [4, 1], [2, 3], [1, 3]]
жесть
объясни что делает juxt

Vadim
29.07.2017
22:23:16

andretshurotshka?❄️кде
29.07.2017
22:23:31
groupWith(lt, [1,2,3,4,1,2,4,5,1,2,4]); //=> [[1, 2, 3, 4], [1, 2, 4, 5], [1, 2, 4]]
о, а я через редьюс пытался лол

Vadim
29.07.2017
22:24:13

andretshurotshka?❄️кде
29.07.2017
22:41:30
?

Google

Vadim
30.07.2017
09:57:26
Есть ли в рамде какой-то "не громоздкий" способ прокидывать сразу несколько аргументов через цепочку вызовов? Все что приходит в голову, это создать из набора аргументов объект, и прокидывать его через compose, преобразуя перед передачей в каждую из функций, и дальше преобразовывая назад. Но это очень уж громоздко. А можно ли проще?

andretshurotshka?❄️кде
30.07.2017
09:58:39
?
делать функции data last

? animufag ?
30.07.2017
10:00:05
map(f => f(a,b))

Vadim
30.07.2017
10:00:14

andretshurotshka?❄️кде
30.07.2017
10:00:42
ну данные последним аргументом

Vadim
30.07.2017
10:01:27
Я про НАБОР аргументов, и в каждую функцию в цепочке

? animufag ?
30.07.2017
10:01:47
compose сможет как-нибудь массив принять?
map(f => f(НАБОР АРГУМЕНТОВ), [КАЖДАЯ ФУНКЦИЯ])

Vadim
30.07.2017
10:03:48

Дмитрий
30.07.2017
10:27:36
Либа в две строки)
https://github.com/zerobias/ensue
Но это всё равно не выход
Нужен нормальный Reader, всё остальное — полумеры

kana
30.07.2017
10:33:37
Не совсем понятно, нужно ли передавать в функции одни и те же аргументы, или каждая функция должна генерить новые n аргументов, которые нужно передать дальше
Можно оборачивать каждую функцию в apply и возвращать массив аргументов

Дмитрий
30.07.2017
10:41:31
Просто передавать через все функции ровно один аргумент
Контекст выполнения, в котором будут содержаться все необходимые данные

Vadim
30.07.2017
11:28:34
Иначе я бы применил juxt )
Или converge
Я так понимаю, что монада Reader для этой таких задач не подходит? Она же обеспечивает только чтение переменных?