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

Языки программирования

Автор Devorator linguarum, октября 31, 2018, 18:59

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

Bhudh

Цитата: Python от ноября 10, 2021, 15:03Зачем здесь изменяющие операторы в лямбдах, если параметры-числа передаются по значению?
Именно для того, чтобы они возвращали изменённое значение иммутабельного аргумента. Это же стрелочные функции, в них не нужен return при отсутствии фигурных скобок.
До ES5 это выглядит так:
[ function(n){ return ++n; }, function(n){ n += 2; }, function(n){ n += 3; } ][n](n);
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Python

Цитата: Bhudh от ноября 10, 2021, 15:06
Цитата: Python от ноября 10, 2021, 15:03Зачем здесь изменяющие операторы в лямбдах, если параметры-числа передаются по значению?
Именно для того, чтобы они возвращали изменённое значение иммутабельного аргумента. Это же стрелочные функции, в них не нужен return при отсутствии фигурных скобок.
До ES5 это выглядит так:
[ function(n){ return ++n; }, function(n){ n += 2; }, function(n){ n += 3; } ][n]();
Так этот код вообще ничего, фактически, не делает. В лямбдах там хотя бы неявным образом происходит return, а в старом синтаксисе изменяется значение только формального параметра (т.е., фактически, локальной переменной, в которую подставляется значение фактического параметра — но не наоборот, значение из формального параметра в фактический параметр не передается). К тому же, здесь формальный параметр опущен — вместо него подставляется undefined, что делает вычисления еще более бессмысленными.

Вот так это работает в node:

> n=1
1
> [ function(n){ return ++n; }, function(n){ n += 2; }, function(n){ n += 3; } ][n]();
undefined
> n
1
> n=0
0
> [ function(n){ return ++n; }, function(n){ n += 2; }, function(n){ n += 3; } ][n]();
NaN
> n
0
>
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Bhudh

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

Python

Цитата: Bhudh от ноября 10, 2021, 15:24
Цитата: Python от ноября 10, 2021, 15:19К тому же, здесь формальный параметр опущен
Я уже исправил.
На результат влияет, на сам фактический параметр — нет:
> n
0
> [ function(n){ return ++n; }, function(n){ n += 2; }, function(n){ n += 3; } ][n](n);
1
> n
0
>
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Upliner

Мурр-мурр

maratique

А если сразу спроектировать язык по этому замыслу, то все гораздо изящнее будет:

if(a<b)
   {b=3;a=sin(b);}
else
   {a=5,b=cos(a);}

Станет
ab<{b3:ab'sin':,a5:ba'cos':}

Кавычки нужны, чтобы отличить переменную sin, от трех переменных s, i, n.
А если основным функциям дать однобуквенные имена типа sin = S, cos = C, tan = T, exp = E, log = L, то совсем классно:
ab<{b3:abS:,a5:baC:}

Memento mori
普京回罗

Upliner

Не, тупо гнаться за компактностью -- гиблое дело. Это не намного длиннее, и гораздо понятнее:
a,b = (sin(b), 3) if a<b else (5, cos(a))
Мурр-мурр

Bhudh

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

Python

Цитата: Upliner от ноября 10, 2021, 16:33
Исправить несложно:

> n = 0
0
> [() => ++n, () => n += 2,() => n += 3][n]();
1
> n
1

Цивилизованнее (т.е., ближе к канонам ФП) было бы так, ІМНО:

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

maratique

Я когда еще начинал только изучать программирование, сразу почувствовал, что ЯПы несовершенны. Но про себя, наверное, думал, что это я так от незнания думаю, а сами создатели языков — умнющие мужики: если бы было можно попроще сделать, то сделали бы.
Но чем больше я узнавал, тем больше я в этом убеждался. А ведь если подумать немного, то вот факторы, способствовавшие несовершенству:

1)Европейское мышление авторов большинства популярных ЯПов, обусловленное грамматикой их родных языков. И принятой математической нотацией(на 99% европейской)

2)Механизм популяризации, когда популярность набирает не самый изысканный и идейный, а самый блатной. Например, наверняка, богатство фирмы, где работал Риччи, стало причиной распространения Unix'а и Си.
А дальше уже работал принцип преимущества, когда самый успешный захватывает всю землю своими потомками: Си++, Java, C#...

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

Например, вместо европоцентристского Вольфрамовского
solve[{2x+8y-z=4,x-3y+6z=0,7x+5y+2z=3},{x,y,z}]
можно было бы написать
2 8 -1 4 1 -3 6 0 7 5 2 3 3L
Здесь L — унарная функция, значение которой для 3 будет 3*3+3 = 12-арной функцией, принимающей коэффициенты системы.

Или например функция A — addition, сложение. Вместо
1+2+3+4+5+a+b+c
можно написать
1 2 3 4 5abc8A — арность как последний аргумент.

Или можно для ходовых функций договориться, что sin = S, cos = C, tan = T. Тогда, используя особую величину-нечисло _, можно выразить и аркфункции:
sin(x) = xS, но sin(_) = _S уже не число, а обратная функция. Поэтому
arcsin(x) = x_S.

Символов
!"#$%&'()*+,-./0123456789:;<=>@?
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`{|}~
с учетом полиморфизма и неограниченной гибкости в определении функций хватило бы на огромное кол-во математических и алгоритмических операций.
Memento mori
普京回罗

Karakurt

Цитата: maratique от ноября 12, 2021, 20:16
можно было бы написать
2 8 -1 4 1 -3 6 0 7 5 2 3 3L
Нечитаемую хрень. Вы чисто покритиковать, или свой ЯП пишете?

maratique

Зато не надо Shift'ами набирать всякие скобки и знаки препинания. Для того, кто много этим занимается, потом уже все очень понятно становится и его эта избыточность бесит.
Memento mori
普京回罗

maratique

ЦитироватьНечитаемую хрень. Вы чисто покритиковать, или свой ЯП пишете?
Написать ЯП сложно, но все-таки всего лишь дело техники. А вот придумать удовлетворяющий тебя замысел, разработать дизайн — это сложный творческий процесс, пусть и не такой муторный, как само написание интерпретатора.

Говорят же, что художниктар — не тот, кто умеет рисовать, а тот, кто умеет видеть. Если он увидел, что-то великолепное и захотел это изобразить, то как-нибудь уж нарисует. Хотя рисовать грех или не грех, не понятно.
Memento mori
普京回罗

kemerover

Изначально вы всё правильно думали. Никому не нужен язык программирования, чтобы косинусы считать. Ну кому-то то есть и нужен, в калькуляторах некоторых примерно такая система, какую вы и описали. Но языки программирования используются и для совершенно других задач. Вот нужно, например, чтоб вы могли купить билет онлайн, сделать чек-ин, сесть на самолёт и полететь, а ещё, дай бог, и приземлиться. И для исполнения каждого этого шага нужен софт, а ещё нужно этот софт не только написать, а ещё поддерживать и улучшать. И нигде там особо ни sin, ни cos не являются ходовыми функциями. А если они и являются ходовыми в каком-нибудь модуле в самолёте, то лучше б, чтоб они там прописывались sin и cos, потому что так меньше шанс, что какой-нибудь джун не ту букву напишет, тест случайно пройдёт, а потом придётся новости печатать об ещё одном упавшем самолёте.

maratique

То есть, хотите сказать, ЯПы намеренно такие избыточные и негибкие, чтобы человеку трудно было ошибиться?
Но тогда, хотя бы те ЯПы, которые предназначены для самого компьютера — байт-коды, например, — они-то хотя бы изысканны и гибки?
Memento mori
普京回罗

Karakurt


kemerover

Цитата: maratique от ноября 12, 2021, 20:43
То есть, хотите сказать, ЯПы намеренно такие избыточные и негибкие, чтобы человеку трудно было ошибиться?
Это один из критериев, который учитывается при разработке ЯП, да. Самые наглядные примеры негибкости ради блага человечества это весь язык Go и borrow checker в Rust.

Цитата: maratique от ноября 12, 2021, 20:43
Но тогда, хотя бы те ЯПы, которые предназначены для самого компьютера — байт-коды, например, — они-то хотя бы изысканны и гибки?
Они оптимизированы для своих юзкейсов. Не знаю, насколько это попадает под изысканность. Про гибкость говорить сложно, это же очень примитивный набор команд, который вживую будут смотреть лишь полтора разработчика в поисках эзотерических багов. Что там надо, кроме Тьюринг-полноты для гибкости? (А в некоторых юзкейсах и она не нужна.)


maratique

Цитата: Karakurt от ноября 12, 2021, 20:50
Главное же не синтаксис, а возможности.
Но это как говорить на четком конланге, в сравнении с русским. В русском сложно иногда создавать окказионализмы, а иногда и причастия с деепричастиями. Например, можно сказать пьющий человек, но нельзя едящий человек. Приходится прибегать к лишней писанине и говорине в виде человек, который ест. Налицо негибкость
Memento mori
普京回罗


maratique

Цитата: Karakurt от ноября 12, 2021, 21:07
Кушающий.
Вот именно. Приходится прибегнуть к совсем другой конструкции. Например, приходится писать cosh(x), хотя можно и cos(i*x)
Memento mori
普京回罗


Bhudh

Цитата: maratique от ноября 12, 2021, 21:05Например, можно сказать пьющий человек, но нельзя едящий человек.
Кто Вам это сказал⁈ :o Это абсолютно нормативное причастие от есть.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

kemerover

Цитата: Karakurt от ноября 12, 2021, 20:54
В чем негибок Го?
Нету наследования, дженериков, исключений, нулевых типов; даже тернарного оператора нету. Это первое, что в голову пришло.

Karakurt

Цитата: kemerover от ноября 12, 2021, 21:21
Цитата: Karakurt от ноября 12, 2021, 20:54
В чем негибок Го?
Нету наследования, дженериков, исключений, нулевых типов; даже тернарного оператора нету. Это первое, что в голову пришло.
И без этого нормально. Просто непривычно.

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

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

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

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

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