Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Татарская нотация

Автор maratique, августа 17, 2022, 08:28

0 Пользователи и 1 гость просматривают эту тему.

maratique

В связи с критикой языка Ложбан, я задался вопросом: а нельзя ли придумать такой способ записи синтаксиса, в котором скобок было бы поменьше?

Например, выражение x=(a+b)*(c+d) содержит 13 символов. Да, скажете вы, можно же польскую нотацию: x a b + c d + * =, которая содержит всего лишь 9 символов. Первый вариант простой для восприятия, но длинный. Второй вариант короткий, но сложен для человеческого восприятия. И возник закономерный вопрос — нельзя ли придумать промежуточную систему, где скобок в два раза меньше? То есть в данном случае было бы 11 символов. Это был бы компромис между простотой и краткостью.

Немного подумав, предлагаю следующее решение: никакого приоритета операций нет, а они все жадные. Но зато можно после знака операций ставить запятую, которая говорит этой операции поумерить свой аппетит.

Например, a+b*c = (a+b)*c, так как жадный знак плюс сразу же связал b. А если мы хотим, чтобы стало a+(b*c) , то пишем так: a+,b*c.

Еще примеры

a+b*,c+d = (a+b)*(c+d)

sin x+y*z = (sin(x)+y)*z

sin x+,y*z = sin(x)+y*z

sin,x+y*z = sin(x+y)*z

sin,,x+y*z = sin((x+y)*z)

sin,x+,y*z = sin(x+y*z)
Memento mori
普京回罗

kemerover

Это для вас легче по восприятию, чем польская нотация?

maratique

Это довольно легко воспринимается, по крайней мере пока операций мало. Наверно даже легче польской. А главное — меньше служебных слов.

Если Ложбан переделать под польскую, то станет коротко и не ясно. А если под татарскую — то станет ошутимо короче, но при этом более-менее ясно.
Memento mori
普京回罗

maratique

В польской было бы

* + a b + c d = (a+b)*(c+d)

* + sin x y z = (sin(x)+y)*z

+ sin x * y z = sin(x)+y*z

* sin + x y z = sin(x+y)*z

sin * +x y z = sin((x+y)*z)

sin + x * y z = sin(x+y*z)

То бишь в польской буквы на месте, но знаки операций скачут. А в татарской и буквы и знаки на своих местах, просто иногда запятые
Memento mori
普京回罗

maratique

Возьмем формулы E = mc2; Ж = (mc)2

Польская =E*m^c2; =Ж^*mc2

Татарская E=m,c2; Ж=mc2 — если знак "равно" традиционный. Ну а жадный знак равно надо писать в конец:
m,c2=E; mc2
Memento mori
普京回罗

maratique

Да, конечно, выражения вида (a+b+c+d)(t+x+y+z) выглядят не очень:
a+b+c+d*,,,t+x+y+z.

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

(a+b(c+d))(t+x+y+z) = a+,b,c+d(t+x+y+z) — экономия двух символов.

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

А та традиционная система, которую все используют —очень непоследовательна, случайна и мультипарадигменная. Поэтому так сложно писать для нее парсер.

А предлагаемую мной систему можно, исходя из смысла запятых, назвать "паузальная нотация". И тогда операции лучше называть не "жадные", а "торопливые".
Memento mori
普京回罗

maratique

Цитата: kemerover от августа 17, 2022, 08:56Это для вас легче по восприятию, чем польская нотация?
Когда вводится что-то новое, то трудно поначалу отличить объективное неудобство от непривычки. После практики, когда привыкаешь к новому, становится ясно, какая система лучше.
Memento mori
普京回罗

maratique

Уравнение сферы с центром в точке (a, b, c) в традиционной нотации:

(x-a)2+(y-b)2+(z-c)2 = R2

А вот в паузальной:

x-a2+,,y-b2+,,z-c2 =, R2 — экономия один символ

Квадратное уравнение:

ax2+bx+c=0
x=(-b+-sqrt(b2-4ac))/(2a)

Соответственно:

x2a+,bx+c=0
x=b2-,,4ac+-sqrt-b/,2a

Memento mori
普京回罗

Python

Цитата: maratique от августа 17, 2022, 08:28sin,x+y*z = sin(x+y)*z

sin,,x+y*z = sin((x+y)*z)
Я бы сделал работу запятой немного по-другому. Т.е., по умолчанию все операции имеют приоритет 0 (самые приоритетные), каждая запятая после них опускает приоритет на единицу. При вычислении, сначала выполняются наиболее приоритетные операци с приоритетом 0, затем — с приоритетом 1, и т.д. Тогда:
sin,x+y*z = sin((x+y)*z)
sin,x+y*,z = sin(x+y)*z
sin,,x+,y*z = sin(x+y*z)

Возможно, имеет смысл не только опускать приоритет, но и поднимать его (обозначим подъем апострофом):
sin x+'y*z = sin(x+y)*z
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Bhudh

Цитата: Python от ноября  5, 2022, 09:02по умолчанию все операции имеют приоритет 0 (самые приоритетные), каждая запятая после них опускает приоритет на единицу. При вычислении, сначала выполняются наиболее приоритетные операци с приоритетом 0, затем — с приоритетом 1
:???
Приоритет — величина отрицательная?
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Python

Цитата: Bhudh от ноября  5, 2022, 09:50
Цитата: Python от ноября  5, 2022, 09:02по умолчанию все операции имеют приоритет 0 (самые приоритетные), каждая запятая после них опускает приоритет на единицу. При вычислении, сначала выполняются наиболее приоритетные операци с приоритетом 0, затем — с приоритетом 1
:???
Приоритет — величина отрицательная?
В данном случае — да. По аналогии с «в первую очередь», «во вторую очередь» и т.д. Или «на первом месте», «на втором месте».
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Rusiok

Две скобки (открывающая и закрывающая) нужны не всегда, часто достаточно одной из них. Например,
a+b)*c
a+(b*c
a+b)*(c+d
sinx)+y)*z
sinx)+(y*z
sin(x+y)*z
sin((x+y)*z
sin(x+y*z.
Кстати, знак "горизонтальная черта", над которой пишется выражение-делимое, а под ней - выражение-делитель, будет означать )/( в такой нотации.

Квадратное уравнение:
a*(x^2)+(b*x)+c=0
x1, 2=-b+-sqrtb^2-(4*a*c)/(2*a
"проект предлагал сократить разговорную речь путем сведения многосложных слов к односложным и упразднения глаголов" - Джонатан Свифт. Путешествие в Бальнибарби

maratique

ЦитироватьКстати, знак "горизонтальная черта", над которой пишется выражение-делимое, а под ней - выражение-делитель, будет означать )/( в такой нотации.
Тогда чтобы просто написать 1/2 надо будет писать (1/2)
Memento mori
普京回罗

maratique

ЦитироватьВозможно, имеет смысл не только опускать приоритет, но и поднимать его (обозначим подъем апострофом):
sin x+'y*z = sin(x+y)*z
Можно просто запятую ставить перед, а не после знака операции. В любом случае такую возможность надо использовать с пользой. Например вместо скобок
Memento mori
普京回罗

basta

ОП, ознакомьтесь https://toaq.net/ . Serial predicates похожи на татарские цепочки из деепричастий.

Easyskanker

Цитата: maratique от августа 17, 2022, 16:40a+b+c+d*,,,t+x+y+z
Вместо запятой можно использовать более различимый символ, например японскую точку:
a+b+c+d*。。。t+x+y+z

Easyskanker


Bhudh

。можно спутать с символом композиции функций ∘.
А квадратик просто неудобно быстро писать от руки.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

maratique

Главное что парсер лёгкий для программирования.

Но вообще-то изначально я хотел таким образом ложбан упростить, добавив слово-запятую, чтобы было поменьше скобок
Memento mori
普京回罗

Bhudh

Цитата: maratique от ноября  6, 2022, 16:01Главное что парсер лёгкий для программирования.
Парсеру вообще пофиг, какие там символы и их комбинации.
Whitespace не даст соврать.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

basta

Цитата: maratique от ноября  6, 2022, 16:01Главное что парсер лёгкий для программирования.
Вы на стороне людей или на стороне машин?

maratique

Для простого стекового языка программирования достаточно:

  • Присваивание
  • Польская нотация
  • Массивы
  • Если
  • goto
  • read/write
(получится польский фортран-66)
И все это парсить чуть ли не легче, чем просто математические выражения в традиционной нотации.
Memento mori
普京回罗

Easyskanker

Цитата: Bhudh от ноября  6, 2022, 15:31。можно спутать с символом композиции функций ∘.
А квадратик просто неудобно быстро писать от руки.
Последний раз я писал код от руки в 2004 году.

Easyskanker

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

basta

Также рекомендую ОПу ознакомиться с системой приоритетов инфиксных операторов в Haskell'е. Это ещё один способ уменьшить число скобок. Глядя на все эти запятые именно Haskell приходит на ум.

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр