@frp_ru

Страница 127 из 420
Denis
02.08.2017
11:30:46
Бля я это иду и пишу по улице))

Denis
02.08.2017
11:35:27
Ну как бы даже есть комбинаторные машины, могу домой прийти и скинуть ссылку

Все что тюринг полное то есть

Google
Denis
02.08.2017
11:35:52
Комбинаторы тоже полные

Кстати с комбинаторами вообще мне кажется никак побочку не сделать, так как нельзя использовать свободные переменные в теле

Vadim
02.08.2017
12:12:54
Я правильно понимаю что на комбинаторах можно построить не все? Они отвечают только лишь за комбинацию функций?

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

Denis
02.08.2017
12:13:53
ну а на функциях можно заэнкодить все

хоть мейби хоть список

это называется Church encoding

еще есть энкодинг Скотта

Vadim
02.08.2017
12:14:32
А комбинаторы только для манипуляций этими функциями и не больше?

Denis
02.08.2017
12:15:12
А комбинаторы только для манипуляций этими функциями и не больше?
https://ru.wikibooks.org/wiki/%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D1%8B_%E2%80%94_%D1%8D%D1%82%D0%BE_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE!

А комбинаторы только для манипуляций этими функциями и не больше?
https://wiki2.org/ru/%D0%A8%D0%B5%D0%B9%D0%BD%D1%84%D0%B8%D0%BD%D0%BA%D0%B5%D0%BB%D1%8C,_%D0%9C%D0%BE%D0%B8%D1%81%D0%B5%D0%B9_%D0%AD%D0%BB%D1%8C%D0%B5%D0%B2%D0%B8%D1%87

Vadim
02.08.2017
12:16:38
https://wiki2.org/ru/%D0%A8%D0%B5%D0%B9%D0%BD%D1%84%D0%B8%D0%BD%D0%BA%D0%B5%D0%BB%D1%8C,_%D0%9C%D0%BE%D0%B8%D1%81%D0%B5%D0%B9_%D0%AD%D0%BB%D1%8C%D0%B5%D0%B2%D0%B8%D1%87
Я ее вчера бегло просмотрел. Отсюда и понял что они только лишь для манипуляций. Ведь при помощи одних только комбинаторов описать, скажем, цикл или условную операцию?

Denis
02.08.2017
12:17:31
Y комбинатор

Google
Denis
02.08.2017
12:17:41
ну или же комбинатор неподвижной точки

условие тоже можно

заэнкодь Bool через функции и будет тебе

http://matt.might.net/articles/js-church/

Vadim
02.08.2017
12:20:23
Интересно, спасибо!

Но получается что циклы я могу описывать только через рекурсии, и значит упереться в ограничение стека?

Denis
02.08.2017
12:22:12
я же говорил что для любой конструкции всегда есть изоморфизм в Черче

ну в таких языках как js да

да и в большинстве энергичных языках

но ведь всегда можно использовать мемоизацию

вот кстати

Шейнфинкелем разработана формальная система, позволяющая избегать использования связанных переменных. Его система была по существу эквивалентна комбинаторной логике, основанной на комбинаторах B, C, I, K и S. Шейнфинкелю удалось показать, что система может быть сокращена лишь до K и S, и изложить доказательство того, что такой вариант системы так же полон, как и логика предикатов[7]. Его работа также показала, что функции двух или более аргументов может быть заменена функцией принимающий лишь один аргумент. Механизм такой замены упрощает работу как в терминах комбинаторной логики, так и лямбда-исчисления и позднее назван каррированием, в честь Хаскелла Карри.

и еще изоморфизм можно написать через рекурсивные схемы

Но получается что циклы я могу описывать только через рекурсии, и значит упереться в ограничение стека?
есть еще такая штука как хвостовая рекурсия и некоторые компиляторы умеют ее оптимизировать в императивный итератор

вот тебе булеан https://github.com/benji6/church/blob/master/src/booleans.js

Vadim
02.08.2017
12:25:20
Про хвостовую рекурсию знаю. Но на фронте на это полагаться нельзя )

Denis
02.08.2017
12:25:32
вот тебе булеан на уровне типов (Черч тут как тут) newtype BoolC = BoolC { runBool :: forall a. a -> a -> a }

true :: BoolC true = BoolC const false :: BoolC false = BoolC $ const id andC :: BoolC -> BoolC -> BoolC andC b c = runBool b c false orC :: BoolC -> BoolC -> BoolC orC b c = runBool b true c notC :: BoolC -> BoolC notC b = runBool b false true xorC :: BoolC -> BoolC -> BoolC xorC a b = runBool a (notC b) b

Vadim
02.08.2017
12:27:18
Я вот думаю, можно ли использовать такую библиотеку как fantasy-birds в качестве полноценной замены ramda? )

Denis
02.08.2017
12:27:36
ну это все фигня) надо продолжать двигать пиксели, писать редьюсеры)))

Google
Denis
02.08.2017
12:28:20
Я вот думаю, можно ли использовать такую библиотеку как fantasy-birds в качестве полноценной замены ramda? )
нет, комбинаторы же заточены на функциональные стрелки, да ты получишь полную алгебру, но только на уровне функций

например S это аппликативный ap но только для функций

Vadim
02.08.2017
12:29:30
В смысле я не смогу писать манипуляций со всякими там массивами или полями объектов?

Обходясь одними лишь комбинаторами?

? animufag ?
02.08.2017
12:32:36
Если хочешь в js чате донести свой вопрос до как можно большей аудитории, то надо задавать вопросы в js-понятном стиле ) Я например не понял что такое (-> а). Это функция, принимающая значение любого типа, но возвращающая строго определенный тип? Или что?
да, сложноватая сигнатурка. тоже некоторое время думал над её трактовкой. когда ты говоришь функтор для мэйби, то подразумеваешь instance Functor Maybe where что в свою очередь подразумевает instance Functor a => Maybe a where (ну функтор принимает одно поле и мэйби принимает одно поле, можно объяснить на кайндах, возможно в пурскрипте более эксплиситно выражается) функтор для (-> a): instance Functor b => (a -> b) where fmap = (.) в джс полиморфизма над типом нет (не знаю как его норм назвать) и сделать прямо такое невозможно поэтому нужно предварительно обернуть в объект и получать полиморфизм над какбы первым аргументом в той либе reducer видимо функция обертка чтобы можно было вызывать map, lift подумал что в рамде есть аналог

andretshurotshka?❄️кде
02.08.2017
12:33:58
Function.prototype.map ?

Denis
02.08.2017
12:34:02
ну как бы проще можно, функтор справедлив для kind вида * -> * а у стрелки * -> * -> * поэтому чтобы сделать функтор нужно частично применить стрелку и поэтому ((->)e)

как бы (->) a b это же a -> b так нам надо применить только для a а b пойдет уже в map

? animufag ?
02.08.2017
12:35:34
ну просто когда видишь (-> a) сложно понять что она значит

Denis
02.08.2017
12:35:52
ты забыл скобки у ->

давай вспомним общую сигнатуру для функтора

? animufag ?
02.08.2017
12:36:30
Function.prototype.map ?
скорей всего. сейчас вспомнил что функшон – объект и видимо всё збс можно мап делать

Denis
02.08.2017
12:36:44
(a -> b) -> f a -> f b

в нашем случае f = ((->) e)

(a -> b) -> ((->) e a) -> ((->) e b)

(a -> b) -> (e -> a) -> (e -> b)

? animufag ?
02.08.2017
12:37:55
я помню пробовал через прототипы сделать методы у нула (чтобы любой нулейбл объект был как мэйби) безуспешно

Denis
02.08.2017
12:38:57
применяя альфа преобразование где, a = b, b = c, e = a (b -> c) -> (a -> b) -> (a -> c) (b -> c) -> (a -> b) -> a -> c что есть классическая композиция для функций или комбинатор B

Google
? animufag ?
02.08.2017
12:39:04
ну не то чтобы совсем тупая затея

в руби бы получилось

Denis
02.08.2017
12:39:09
доказано)

? animufag ?
02.08.2017
12:39:18
нул объект класса нул

но всем похуй на руби

Denis
02.08.2017
12:39:55
потому что оно дно

Denis
02.08.2017
12:40:29
можете кстати доказать для ap и поймете что это S

? animufag ?
02.08.2017
12:40:45
а ты скобки раскрыл

Denis
02.08.2017
12:40:49
можете также сделать инхабитацию по типу, зная что те 2 сигнатуры это аксиомы с логики

Admin
ERROR: S client not available

Denis
02.08.2017
12:46:13
(a -> b -> c) -> (a -> b) -> a -> c a -> b -> a

проведя инхабитацию увидите что вы выведете SK

тем более для K вообще изич)

там прям берешь тип и ставишь в тело

а дальше можно построить бесконечное количество комбинаторов

процесс инхабитации это восстановление тела функции по ее типу

? animufag ?
02.08.2017
14:06:28
Тоже есть
подкинешь ссылку

варарги только в ишью нашёл

но они работают

Google
Denis
02.08.2017
14:09:52
это же было просто переименование?
Ну это и есть альфа преобразование, переименование переменных без потери смысла

Кстати из задачек для аутистов, написать compose на языке с дженериками
Ну так напиши через моноидную свертку эндоморфизмов

? animufag ?
02.08.2017
14:27:15
кажется это задачка для тебя



Denis
02.08.2017
14:48:57
Так это же просто перегрузка?

? animufag ?
02.08.2017
14:50:15
хмм какая именно перегрузка

Denis
02.08.2017
14:50:51
Ну в нормальных языках это перегрузка функции по женерику наверное

? animufag ?
02.08.2017
14:51:06
в финальный джс попадёт function id(t) { return t } function id(t) { return "lol" } ?

ну скорей всего ты имеешь ввиду специализация

Denis
02.08.2017
14:51:45
Какая-то фигня))

? animufag ?
02.08.2017
14:51:49
в плюсах есть специализайция в темплейтах

в других языках такого нет

тк это рантайм анализ

andretshurotshka?❄️кде
02.08.2017
14:52:13
омг

нафига функцию два раза определять?

В флоу нет такой перегрузки

? animufag ?
02.08.2017
14:52:53
спрашиваешь зачем я вообще написал такой код?

andretshurotshka?❄️кде
02.08.2017
14:52:58
ну

? animufag ?
02.08.2017
14:53:21
Ну да нужна ещё специализация дженериков

Тоже есть

проверка

мб кто-нибудь запустит у себя

лень настраивать окружение

Страница 127 из 420