Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничные комбинаторы / 25 сообщений из 37, страница 1 из 2
03.07.2015, 19:44
    #38999342
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Здарова коллеги.

Хаскелисты . Сишники. Жаботисты. Лиспо-веды. Счетуны . Математики и прочие любители загадок парадоксов
брейнфаков, эзотерических языков. А также Илья. Сова. Дима. Саша-Меркурий. Владимир. Егорыч. Сибиряков.
И Сидоров. Ну .. если Базист подтянется - будет вообще чудненько.

Тема - комбинаторная логика (КЛ). Опущу детали. Интересущиеся почитают книжку Душкина или Вики.
Или более фундаментальные труды Хаскелла Карри. Вкратце.

Комбинатор - это некоторый константный объект который не содержит в себе переменных но
позволяет комбинировать себя с аргументами и другими объектами, попутно порождая новые символьные
конструкции которые также могут комбинироваться.

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

Алфавит комбинаторов состоит из:

Заглавных букв (комбинаторы)

Строчных букв (переменные)

Круглые скобки как приоритетность

Знак равенства - постулируемое правило аппликации.

Душкин выделяет следующие фундаментальные комбинаторы (осторожно под катом
буквы):

Канцеллятор
Код: plaintext
1.
Kxy=x


Коннектор
Код: plaintext
1.
Sxyz=xz(yz)


Тождество
Код: plaintext
1.
Ix=x


Композитор
Код: plaintext
1.
Bxyz=x(yz)


Пермутатор
Код: plaintext
1.
Сxyz=xzy


Дубликатор
Код: plaintext
1.
Wxy=xyy



Их названия могут отличаться от других в переводной литературе. На суть не влияет.

Группы комбинаторов могут образовывать базисы. И выражаться друг через друга.
Впрочем это сейчас не важно.

Что я хочу сделать.

Ну... наверное свой макет для экспериментов с КЛ. И реализацию на сях.

Как я это хочу сделать

Да вобщем-то всё равно. Можно
Код: plaintext
1.
2.
3.
void main(int argc, char **argv){
    eval_combinators("....");
}


с выводом диалога в REPL. Можно оконным приложением.
Можно чтением из stdin.

Ради чего я всё это делаю.

1) Ну во первых - Just For Fun. Ради удовольствия. Ради spend time.
2) Во вторых, чтобы освоить интересный раздел ФП и применить эти знания
в будущем в других смежных областях. В обработке текста.
3) Попутно поковырять С/C++ и трансляторы и запилить свой собственный "deqaws" или
обфускатор.

В чём пока еще я не разобрался
Как доказать конечность комбинаций? Возможны ли зацикливания и рекурсии?
Как постулировать "число" и "операции" над ним?
Как синтезировать строительные блоки - DO,WHILE,IF,IF-ELSE и использовать их?
Существует ли "контекст" аппликаций?
Как "оптимизировать" строковые замены?
Как... e.t.c.

Вобщем слушаю каменты.
Ваш покорный слуга и модератор mayton

P.S. Время до ПН еще есть...
...
Рейтинг: 0 / 0
03.07.2015, 19:52
    #38999346
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
maytonСибиряков.
На меня не рассчитывай. Из всех комбинаторов я знаю только Бендера, а из поста не понял ни
слова.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.07.2015, 19:57
    #38999349
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
А ну ОК. Не страшно. Побудь в подписчиках.
...
Рейтинг: 0 / 0
03.07.2015, 20:18
    #38999363
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Dimitry Sibiryakovиз поста не понял ни слова.

+1

mayton, не умничай, на пальцах объясни.
...
Рейтинг: 0 / 0
03.07.2015, 20:21
    #38999366
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Дайте подумать. Чёт упустил во введении.
...
Рейтинг: 0 / 0
03.07.2015, 20:25
    #38999373
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Или ссылок дай где ты этих заумностей нахватался. Примеры давай. Тут знатоков теории мало, лично я немного знал и то забыл, Саша может поймет о чем речь.
...
Рейтинг: 0 / 0
03.07.2015, 20:39
    #38999380
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Погуглил
Комбинаторная логика
Комбинаторы — это просто!

Это какой-то глубокоматематический капец без намека на реальное примение. Не, может я не понял глубину, но данное чтиво может взорвать мозг, а он у меня один и я его берегу ))
...
Рейтинг: 0 / 0
04.07.2015, 06:39
    #38999500
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
mayton Тема - комбинаторная логика (КЛ). Опущу детали. Интересущиеся почитают книжку Душкина или Вики.
Или более фундаментальные труды Хаскелла Карри. Вкратце.
эээээ.... как бы сказать помягче.
Не надо их читать. Есть намного более лучшие, понятные и поступательно развивающие тему книги.
Можешь начать с Michael Sipser, Introduction to the Theory of Computation.
Душкина я не листал, но судя по нестандартности терминов которые ты использовал - читать его не надо.
А Curry тут слегка не в тему, тебя зацепил разбор грамматик, а у Curry это мизерный этап, к Curry надо приходить уже хорошо разбираясь в грамматиках.

Ну это что касается теории...

mayton Ради чего я всё это делаю.

1) Ну во первых - Just For Fun. Ради удовольствия. Ради spend time.
2) Во вторых, чтобы освоить интересный раздел ФП и применить эти знания
в будущем в других смежных областях. В обработке текста.
3) Попутно поковырять С/C++ и трансляторы и запилить свой собственный "deqaws" или
обфускатор.

Вопрос первый, ты очень огорчишься если я ткну пальцем в Yacc/Bison и скажу что эти приложения как раз и делают то о чем ты говоришь? :)
А еще есть целый язык OCaml в котором разбор грамматик является фичей встроенной в сам язык. И мне сильно кажется что всего Верблюда именно ради этого и делали. Очень уж легко на нем делать трансляторы, за счет всего остального...

mayton В чём пока еще я не разобрался
Как доказать конечность комбинаций? Возможны ли зацикливания и рекурсии?Конечность? А что ты под этим понимаешь?

И да, рекурсии возможны.
Вот тебе рекурсия:
A = Aa | ɛ
А зацикливания невозможны.

Зато могут быть проблемы неоднозначности:
A = ba|Ba
B = b
В этом случае строку "ba" можно описать двумя разными путями.

maytonКак постулировать "число" и "операции" над ним?
NUMBER = DIGIT | NUMBER DIGIT
DIGIT = 0|1|2|3|4|5|6|7|8|9

OPERATIONS = NUMBER OPERATOR NUMBER | OPERATIONS OPERATOR NUMBER
OPERATOR = + | - | * | /


maytonКак синтезировать строительные блоки - DO,WHILE,IF,IF-ELSE и использовать их?
STATEMENTS = STATEMENTS STATEMENT | STATEMENT
STATEMENT = WHILE_DO | DO_WHILE | IF_BLOCK | SOME_OTHER_PRIMITIVES
WHILE_DO = WHILE CONDITION DO STATEMENTS LOOP
DO_WHILE = DO STATEMENTS WHILE CONDITION
CONDITION = LOGIC_OPERAND LOGIC_OPERATOR LOGIC_OPERAND



maytonСуществует ли "контекст" аппликаций?Нет, по определению.
Вспоминай как все это называется... Хотя... Судя по "комбинаторам" и "аппликациям" Душкин не смог найти стандартные названия "терминалы" и "правила".
В общем намекаю: в нормальной литературе это называется "Context Free Grammar"...

maytonКак "оптимизировать" строковые замены?Никак. Если некоторая цепочка распознавания может быть оптимизирована - значит строку можно распознать двумя способами, оптимизированным и не оптимизированным. А значит у нас появляется неоднозначность которая совершенно недопустима.
...
Рейтинг: 0 / 0
04.07.2015, 06:47
    #38999502
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Dima TПогуглил
Комбинаторная логика
Комбинаторы — это просто!

Это какой-то глубокоматематический капец без намека на реальное примение. Не, может я не понял глубину, но данное чтиво может взорвать мозг, а он у меня один и я его берегу ))Ой. Нет, этого Душкина читать не надо.
Может для людей идущих из математических глубин это изложение будет удобоваримым. Но людям с программистской базой лучше начинать с автоматов различной степени детерминированности и регулярных выражений. Поняв эти две темы - формальные грамматики укладываются в голове очень даже легко.
...
Рейтинг: 0 / 0
04.07.2015, 23:35
    #38999719
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
White Owlmayton Тема - комбинаторная логика (КЛ). Опущу детали. Интересущиеся почитают книжку Душкина или Вики.
Или более фундаментальные труды Хаскелла Карри. Вкратце.
эээээ.... как бы сказать помягче.
Не надо их читать. Есть намного более лучшие, понятные и поступательно развивающие тему книги.
Можешь начать с Michael Sipser, Introduction to the Theory of Computation.

Эта книга?
http://cglab.ca/~michiel/TheoryOfComputation/TheoryOfComputation.pdf

Душкина я не листал, но судя по нестандартности терминов которые ты использовал - читать его не надо.
А Curry тут слегка не в тему, тебя зацепил разбор грамматик, а у Curry это мизерный этап, к Curry надо приходить уже хорошо разбираясь в грамматиках.
Душкин вообще пишет в тему Haskell. А комбинаторы - просто небольшой раздел в книге.
...
Рейтинг: 0 / 0
04.07.2015, 23:56
    #38999724
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Конечность? А что ты под этим понимаешь?

И да, рекурсии возможны.
Вот тебе рекурсия:
A = Aa | ɛ
А зацикливания невозможны.

Я здесь не понимаю что обозначает символ |
И не понимаю как толковать комбинатор А.
...
Рейтинг: 0 / 0
05.07.2015, 00:04
    #38999727
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
NUMBER = DIGIT | NUMBER DIGIT
DIGIT = 0|1|2|3|4|5|6|7|8|9

OPERATIONS = NUMBER OPERATOR NUMBER | OPERATIONS OPERATOR NUMBER
OPERATOR = + | - | * | /
Нет нет. Это не то. Данная форма ЕМНИП называется ЕБНФ или разновидность ее.
И кажется надо ставить не равно а двоеточие и равно "::=".

Она описывает "возможность" применения дерева разбора к числовому выражению
типа NUMBER. Но на этом возможности Яков и Бизонов заканчиваются.

Меня-же интересует другое. Формализация операций над целыми. Через индукцию.

Например:

Код: plaintext
1.
1 + 4 = 1 + (1 + (1 + (1 + 1)))



Вобщем вроде как то вот так.
...
Рейтинг: 0 / 0
05.07.2015, 00:13
    #38999730
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Никак. Если некоторая цепочка распознавания может быть оптимизирована - значит строку можно распознать двумя способами, оптимизированным и не оптимизированным. А значит у нас появляется неоднозначность которая совершенно недопустима.
Возможно я другое имел в виду. К примеру если я строю некую комбинаторную
машину, то я расчитываю что в выражении
Код: plaintext
1.
WS(BWB)a


при выполнении аппликаций я вынужден буду либо выполнять поочерёдно
всю последовательность нужных преобразований внутри строки либо
строить доп. структуры данных (бинарные деревья) для оптимизации
вычислений (особенно если формула будет в 100 или в 10000 крат
превышать образец который я привёл выше).
...
Рейтинг: 0 / 0
05.07.2015, 04:22
    #38999770
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
maytonКонечность? А что ты под этим понимаешь?

И да, рекурсии возможны.
Вот тебе рекурсия:
A = Aa | ɛ
А зацикливания невозможны.

Я здесь не понимаю что обозначает символ |
И не понимаю как толковать комбинатор А. Символ "|" означает "или".
В сумме это все читается:
Правило А это Правило А и символ "a" или пустая строка.
На практике - любая строка состоящая из нескольких (от нуля до бесконечности) символов "a".
...
Рейтинг: 0 / 0
05.07.2015, 04:28
    #38999771
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
maytonЭта книга?
http://cglab.ca/~michiel/TheoryOfComputation/TheoryOfComputation.pdf
Нет, на моей книжной полке стоит другая (ISBN 9780534950972), но судя по оглавлению это тоже можно читать.

Хотя я бы поставил третью главу после четвертой и пятой. Мне кажется что надо сначала разобраться что такое определяемые и неопределяемые языки (пятая глава) прежде чем браться за внеконтестную грамматику. Но большинство учебников (включая Сипсера) со мной не согласны .... Но это мелочи на самом деле :)
...
Рейтинг: 0 / 0
05.07.2015, 04:38
    #38999772
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
maytonNUMBER = DIGIT | NUMBER DIGIT
DIGIT = 0|1|2|3|4|5|6|7|8|9

OPERATIONS = NUMBER OPERATOR NUMBER | OPERATIONS OPERATOR NUMBER
OPERATOR = + | - | * | /
Нет нет. Это не то.
....
Меня-же интересует другое. Формализация операций над целыми. Через индукцию.

Например:

Код: plaintext
1.
1 + 4 = 1 + (1 + (1 + (1 + 1)))



Вобщем вроде как то вот так.Вот это как раз оно и есть.
Если ты хочешь еще и скобки и знак равенства распознавать, то просто чуть усложняешь уже показанные правила:
OPERATIONS = ( OPERATIONS ) | NUMBER OPERATOR NUMBER | OPERATIONS OPERATOR NUMBER | NUMBER
LOGIC_OPERATION = OPERATIONS LOGIC_OPERATOR OPERATIONS
LOGIC_OPERATOR = = | < | > | and | or
И все.


mayton Данная форма ЕМНИП называется ЕБНФ или разновидность ее.
И кажется надо ставить не равно а двоеточие и равно "::=".
Я не знаю что такое ЕБНФ, извините. А двоеточие или равенство это не так уж важно, это зависит от используемого парсера (и учебника). В большинстве случаев правила определяются вообще стрелочкой, но я не помню ю-код символа "стрелочка", так что использовал знак равенства. Ну извините.
...
Рейтинг: 0 / 0
05.07.2015, 04:43
    #38999773
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
maytonНикак. Если некоторая цепочка распознавания может быть оптимизирована - значит строку можно распознать двумя способами, оптимизированным и не оптимизированным. А значит у нас появляется неоднозначность которая совершенно недопустима.
Возможно я другое имел в виду. К примеру если я строю некую комбинаторную
машину, то я расчитываю что в выражении
Код: plaintext
1.
WS(BWB)a


при выполнении аппликаций я вынужден буду либо выполнять поочерёдно
всю последовательность нужных преобразований внутри строки либо
строить доп. структуры данных (бинарные деревья) для оптимизации
вычислений (особенно если формула будет в 100 или в 10000 крат
превышать образец который я привёл выше).ээээээ......
Во первых, ты никаких преобразований внутри строки не делаешь.
Во вторых, оптимизация вычислений это вещь совершенно отдельная от разбора строки.
Разбор строки это всегда превращение строки в дерево (не бинарное!). А что ты будешь делать с этим деревом потом, это уже совершенно другой вопрос и к собственно к процессу построения дерева не относится.
...
Рейтинг: 0 / 0
05.07.2015, 10:08
    #38999790
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
White OwlmaytonЭта книга?
http://cglab.ca/~michiel/TheoryOfComputation/TheoryOfComputation.pdf
Нет, на моей книжной полке стоит другая (ISBN 9780534950972), но судя по оглавлению это тоже можно читать.

Хотя я бы поставил третью главу после четвертой и пятой. Мне кажется что надо сначала разобраться что такое определяемые и неопределяемые языки (пятая глава) прежде чем браться за внеконтестную грамматику. Но большинство учебников (включая Сипсера) со мной не согласны .... Но это мелочи на самом деле :)
Ага. Вот эта? http://www.amazon.co.uk/dp/0534950973
...
Рейтинг: 0 / 0
05.07.2015, 16:25
    #38999923
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
maytonАга. Вот эта? http://www.amazon.co.uk/dp/0534950973 yes
...
Рейтинг: 0 / 0
06.07.2015, 14:03
    #39000538
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Глубоко не изучал исчисление и производные от него, потому не смогу подсказать вам сейчас, Марк. Идею касаемо обфускатора полностью поддерживаю и если вы всё-таки решите позже этим заниматься, готов присоединиться
...
Рейтинг: 0 / 0
06.07.2015, 14:37
    #39000568
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Я долго запрягаю перед тем как ехать. И вобщем-то комбинаторный код мне почему-то напомнил decaws.
Тут недавно один чел создавал свой эзотерический язык c таким названием (стековая машина с минимумом
команд). И у меня возникли корыстные идеи. Правда перед тем как их обсуждать хотелось-бы самому
понять суть КЛ и что оно даёт. В первую очередь привлекает отсутствие машины имени Тьюринга которую
мы натягиваем на любую вычислительную систему.
...
Рейтинг: 0 / 0
06.07.2015, 14:45
    #39000576
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
maytonТут недавно один чел создавал свой эзотерический язык c таким названием
(стековая машина с минимумом команд).
Он, видимо, никогда не слышал о Прологе...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.07.2015, 14:55
    #39000587
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Dimitry Sibiryakov, ты хотел сказать о Форте?
...
Рейтинг: 0 / 0
06.07.2015, 15:16
    #39000617
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
maytonты хотел сказать о Форте?
Нет, именно о Прологе. ЕМНИП, там четыре оператора и стэковая архитектура с бэк-трекингом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.07.2015, 16:18
    #39000705
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тяпничные комбинаторы
Dimitry Sibiryakovстэковая архитектура с бэк-трекингом .
Ого. Звучит внушительно. Не слыхал.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничные комбинаторы / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]