
Denis
02.08.2017
11:30:46
Бля я это иду и пишу по улице))

Vadim
02.08.2017
11:34:06

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

Vadim
02.08.2017
12:16:38

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
например S это аппликативный ap но только для функций

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

? animufag ?
02.08.2017
12:32:36


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

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
я помню пробовал через прототипы сделать методы у нула (чтобы любой нулейбл объект был как мэйби)
безуспешно

andretshurotshka?❄️кде
02.08.2017
12:38:28

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
потому что оно дно

? animufag ?
02.08.2017
12:40:22

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

? 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
Ну да нужна ещё специализация дженериков
Тоже есть
проверка
мб кто-нибудь запустит у себя
лень настраивать окружение