Выполнение групп в недетерминированной машине. Кажется интересные методы, ну есть вопросы для посоветоваться

Так как подстрочные и надстрочные знаки здесь не печатаются, я обозначил их стрелками вверх/вниз

Результатом выполнения любого концепта является метасвойство (|) инициирующее одноименное Метасобытие перечислимого типа Boolean имеющего два значения «!» —Истина и «¬» -Ложь.

Успешное выполнение концепта это выполнение со значением свойства «|» -Истина.

Каждый класс концептов имеет свое назначение и специфику выполнения.

Для успешного выполнения содержимого групп Collection необходимо успешное выполнение всех элементов группы (семантическое И).

Концепты группы Array выполняется как выборка из Min элементов имеющих успешное выполнение (семантическое Или) Max раз.

Выполнение групп концептов порождаемых скобками Collection и Array зависит от типа подстрочных и надстрочных значений после закрывающей скобки.

Если это значения типа Token, то это свойства соответственно Min и Max которые определяют минимальное и максимальное значение успешных выполнений содержимого группы необходимых для успешного выполнения группы. По умолчанию Min=1, Max=0 что соответствует одному обязательному выполнению группы Collection и выборке одного элемента один раз группе Array.

Успешное выполнение группы заключается в успешном выполнении содержимого группы >=Min и <=Max раз. При значении Min=0 выполнение группы считается успешным даже если не было успешного выполнения ни одного элемента группы.

Классы групп Collection и Array порождают соответственно группы Do и Select.

Определение понятия Заголовок.

 Define 

Заголовок { { «Формальные параметры» }

 ↓ 

0 Class { Name}

 ↓ 

0 { Help}

 ↓ 

0}

Т.е. Заголовок начинается с, возможно, (подстрочное значение 0) Формальных параметров, затем обязательного имени класса за которым, возможно, имя создаваемого концепта и, возможно, свойство Help.

Определения понятия Word.

Define Word { Letter } ↑15  ‘От одной до 16 букв. 



Define Name [Word {«"» {Mark} ↓ 0 ↑ 15 «"»}]

Понятие Name это либо слово, либо последовательность знаков (до 16) в двойных прямых скобках.

[a=b+c d=e*f+a] ↓ 2 ‘Параллельное выполнение двух присваиваний два раза.

Надстрочное значение типа Token (Max) — ограничивает число выполнений группы.

Надстрочное значение типа Boolean (While) допускает выполнение группы пока это свойство истинно с проверкой перед выполнением группы.

Подстрочное значение для групп Collection типа Boolean (Until) ограничивает выполнение группы пока False с проверкой после выполнения группы.

Подстрочное значение перечислимого типа для групп Array (Select) выполняет только элемент группы с индексом этого значения.

Вычисление NOD. Значения a и b передаются как параметры.

@Int32( a, b) Int32 Nod =: a~b |{ =Nod =a

> a=a-b (Пример 1)

<b=b-a}

Это стандартный синтаксис подписок на отработку событий сравнения параметров выполняемых диспетчером событий. Проблема только в том, что это первый шаг алгоритма Евклида, и надо бы его зациклить для выполнения операции сравнения следующего шага алгоритма, но тогда надо заново адресоваться к Nod в подписках пока не равенство а и b что б опять выполнилась операция сравнения и повторилась подписка. Потому применим другой подход. Используем группы класса Do, расширяющие возможности выполнения групп. А именно. Группа класса Do :

Надстрочным значением имеют логическое выражение While и выполняются до тех, пор пока это значение истинно реализуя, таким образом, цикл.

Подстрочное значение для группы Collection (круглые или фигурные скобки) логическое значение Until, а для групп Select (квадратные скобки) перечислимое значение — индекс выполняемого элемента группы (свойство Select).

Итак, вычисление НОД выглядит так:

@Int32( a, b) Int32 Nod =: [ Nod =a



                                                 a=a-b               (Пример 2)



                                                 b=b-a] ↓  a ~ b ↑ a ≠ b

Проверка свойства While осуществляется до выполнения группы (но после вычисления свойства Select), а свойство Until проверяется после выполнения группы.

Выполнение группы начинается с операции сравнения, результат которой — перечислимое значение и квадратные скобки, стало быть выполняется это свойство Select. Выполнение:

Шаг 1. Проверяем свойство While и при не истинности останов. При истинности шаг 2.

Шаг 2. Выполняется один из элементов группы с индексом перечислимого результата сравнения свойства Select и Шаг 1.

Реализация оператора If группой Do. В группа If выполняет первый или второй оператор группы в зависимости от значения логической переменной F:

 [If a=a +b  a=a*b] ↓ F

Хотя реализация этого оператор проще с помощью подписок.

F |{! a=a +b  ¬ a=a*b}

Определим текстовую группу Bracket открывающих скобок.

 [Bracket «(», «{», «[»]

Синтаксис концепта или группы. (С проверкой на соответствие закрывающих скобок открывающим) Параметром служит элемент группы (концепт In).

@ Concept In Define Group {Bracket S:=Bracket |  {In} ↑ 15 [«)»  «}»  «]»] S  ¬ In }

При адресации понятию Group анализ начинается с присвоения перечислимого значения S, которое обращается к группе Bracket, результат которого анализируется подпиской. Если операция присвоения закончилась не успешно ( Лексема не скобка метасвойство равно ¬), то это просто концепт.

При успешном присвоениии (обнаружив открывающую скобку) S имеет значение индекса обнаруженной скобки анализируем на повторение содержимого группы (In) определенного как параметр до 16 раз. После чего заканчиваем разбор скобкой необходимого вида определенной группой закрывающихся скобок Select выбирающей необходимую закрывающую скобку перечислимым значением S.

Разбор арифметического выражения.

 Define Expression {Bracket S= Bracket | { ! {  [ «+» «-» ] ↓ 0 ↑ 1 Expression  {«)» , «}»  «]»} ↓ S }



                                                                          ¬ {Значение {[ «+» «-»«*» «:» ] ↓ 1 ↑ 1 Expression } ↓ 0 ↑ 16 }

При наличии открывающей скобки «!» проверяем на наличие знака префиксной операции +/- перед выражением, далее выражение, за которым должна следовать закрывающая скобка выбранная из группы закрывающих скобок группой Select определяемой подстрочным значением перечислимого типа.

При отсутствии скобки «¬» проверяем понятие Значение за которым может следовать один из знаков операции за которым обязательно должно следовать выражение. Значение это либо непосредственно цифры, либо адрес на значение соответвующего типа.

Определение групп Do и Select не только типом скобок, но и непосредственным указанием класса. Тип скобок тогда не имеет значения.

Определим группу событий Events

{Events F1 Null F2 Null F3 Null }

И группу Select операторов OP.

Select {Op Op1 Op2 Op3} ↓ Events

Обращаясь к группе Op выполнится только оператор с индексом истинного события в группе Events

Реализуя функционал привычного оператора Select Case только с разделением на две части, одна из которых определяет индекс, а вторая содержит выполняемые операторы.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Если я понял, что автор Кузьмин, как только увидел заголовок статьи в общем списке, я єкстрасенс?

Напомнило комбинацию из мортал комбат ультимейт, открывает секретное меню где можно выставить фаталити одной кнопкой.
A C ↑ B ↑ B A ↓

9gag.com/gag/3279266?ref=ios

Да мёртвый твой проект, мёртвый. Пока он не будет понятен людям, шансы что его воспримут в мире людей отрицательны. То есть с каждой попыткой донести шансы только падают. Рынок это не примет тем более.

Почему так — уже объяснял. Все эти модели нужны людям, системное программное обеспечение нужно лишь как способ машине понять людей. Не наоборот. Именно человек — слабое звено, и делая проект непонятным человеку, не продашь.

Хотя я не исключаю, что аутисты вполне даже могут это принять. Но вот донести до аутистов... это та ещё задачка. Не говоря уж о том, чтобы им продать. Почему аутистам? Потому что их память не прошита типовыми для остальных шаблонами.

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

PPS. Учитывая, сколько лет уже занимаешься проектом, и какова скорость движения этого счастья в маркетинговом плане, каковы перспективы на ближайшие лет 20?

Какая разница, что там в недетерменированной машине, если тебе нужно воспроизвести эту машину в памяти и ассоциациях человека?

Да, прав ты. Конечно, трудно изменить мозги миллионам привыкших программировать на классической архитектуре и на классических языках. Но, я предлагаю будущее. Причем в определенной области. Там это имеет смысл и даже по иному получается через жопу. Но привычно.

Учитывая, сколько лет уже занимаешься проектом, и какова скорость движения этого счастья в маркетинговом плане, каковы перспективы на ближайшие лет 20?

Надеюсь лет 10. Доживу или нет не знаю.

Именно человек — слабое звено, и делая проект непонятным человеку,

Повторюсь. Мой язык проще. Просто не привычно.

Ну вот, кажется, еще более простой ru.wikipedia.org/wiki/Brainfuck но им обычно не пользуются

Почему же не пользуются? Helsi.me на нём написан

Простота не в символьном минимализме, а в семантической близости текстового представления с одной стороны человеческому мышлению, а с другой стороны реальному миру. Что позволяет легче ставить задачу и ее реализовывать в тех же терминах и образах.

Ассемблер близок реальному миру, ООП близко человеческому мышлению, Перл близок тексту.

Ассемблер близок реальному миру

Ассемблер близок архитектуре процессора. Читай внимательно, а не цепляйся за слова, которые понял. Я б не сказал что на ассемблере легко ставить задачу. ООП ближе к мышлению в смысле представления данных и построения структуры программы. Однако он ничего не формализует (кроме данных) для взаимодействия объектов. Особенно внешних событий. Потому ставить задачу на нем, как в декларативных языках, не реально. Это касается вообще всех императивных языков. Императивная парадигма так и названа что суть ее команды. А реальном мире надо и «слушать.» Это порождает параллелизм.

Так в Линуксе слушают через select() или poll(). Оно работает, и работает быстро, и работает на стандартном железе. В эмбеддеде слушают через conditional variables и через прерывания. Тоже работает быстро, и тоже на обычном железе, и веками опробовано.

А декларативные языки, кроме SQL, вообще не пошли в массы. Вероятно, не зря. Даже с мейкфайлов ушли в CMake, который ближе к императивным. И в SQL встроили императивные процедуры.

В эмбеддеде слушают через conditional variables и через прерывания. Тоже работает быстро, и тоже на обычном железе, и веками опробовано.

За века ты погорячился. Прерывания придумали на моей памяти. Дейкстра, кстати, был очень против. Он очень огорчался за недетерминированность возникающую при прерываниях. Это я так. SQL, не декларативный. А остальные тоже живы. Даже новый появился Nemerle. Мне с тобой трудно разговаривать. Ты вроде бы и читаешь, но понимаешь как то очень своеобразно.

Клепманн считает SQL декларативным и говорит, что он победил потому, что давал возможность базам данных жестко оптимизировать запросы — именно благодаря декларативности. Мне его размышления кажутся аргументированными.

Охренеть. Заглянул в вики там и HTML считается декларативным..

А раскрашивает самостоятельно. У меня не так и смысл другой..

Первый раз получилось более-менее отформатировать. За ошибки извиняюсь. Правки не нашел. По поводу посоветоваться продумывал вместо оператора For сделать тип переменной изменяемой машиной в заданном диапазоне. А функционал прилепить к событиям. Вопроса 2. Первый реализуем ли в железе такой тип данных, и второе все попытки придумать синтаксис удобоваримый не удались. Есть еще тема для интересующихся. А возможно и заработать. Нашел фирму что готова проинвестировать 3 миллиона. Надо презентацию сделать. Есть способные? Не за бесплатно. Это отдельный разговор в личке.

Підписатись на коментарі