Как стать автором
Обновить

Комментарии 70

спрячьте лучше ответ, пусть народ поугадывает.
Ответ-то спрятали, а тег все равно на месте:)
О теге я благополучно забыла :-) Спасибо.
в MUMPS тоже «не поддерживаются привычные приоритеты арифметических операций (например, выражение 2+3*10 даёт в MUMPS значение 50);»
Хотя 2*2+1 вычислит как 5
Видимо потому, что операции выполняются последовательно слева на право.
именно, и 1+2*2 даст снова 6
таких языков много…
Мммм, а в чём прикол такого подхода?
В самом языке? Официально «An Introductory Course in J» говорит примерно следующее: все глаголы, и примитивы языка, и определенные программистом, имеют одинаковый синтаксис (имя глагола и 1 или 2 операнда), плюс любому глаголу можно привоить другое имя. Поэтому составить правильный список приоритетов глаголов достаточно сложно, и выбрано самое простое правило порядка выполнения глаголов.

С моей неофициальной точки зрения — просто чтобы программистам жизнь медом не казалась :-)
скорее потому, что компилятор/интерпретатор без приоритетов в арифметических выражениях легче реализовать :)
тогда вообще пусть сделают 2 2 * 1 + (обратную польскую запись).
вообще просто будет жить
в Forth'e так и сделано :)
не думаю, что это прибавит популярности языку…
А это не реклама языка, а так, наблюдение из жизни противоестественных языков программирования.
я ж не про ваш пост)) я про эту… мм… «особенность»
По сравнению с другими «особенностями» это еще конфетка — с этим можно бороться всего лишь обильной расстановкой скобок :-)
а это уже антиреклама ;) ))))
Ну уж нет! Мне хватит и лиспа с его обилием скобок.
Скобки лишними не бывают, всегда лучше поставить скобки в непрозрачном месте, чем потом судорожно вспоминать приоритет выполнения операций. А этот язык дополнительно стимулирует к этому разработчиков.
Хотя фича неприятная, это да.
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
НЛО прилетело и опубликовало эту надпись здесь
как раз «обычная запись» — это смешение, а здесь всё выполняется одинаково, справа налево.
Вон в виндовом калькуляторе приоритет операций вообще от текущего вида зависит. То 2+2*3 будет 12, а то 8. И ничего, привыкли все уж.
Видно Вы в школе не вкусили прелести расчетов на инженерных и программируемых калькуляторах:)
Или забыли?:)
пфф. мк52 и болгарская нотация смеются над этим постом
Болгарская?
Венгерская ;)
Польская :)
off линуксоиды в genius-е считают =)
Подобное «нарушение» будет наблюдаться в Smalltalk и некоторых его родственниках, т.к. операции на самом деле — посылка сообщений, выполняющаяся слева на право. Т.е. 1+2*2 вернет 6.
А к ним можно отнести Self, Strongtalk (тот же смолток, только со стальными яйцами) и Newspeak. В своем последнем творении (COLA), Алан Кей почему-то отказался продолжать идею «простой посылки» сообщения и появились приоритеты математических сообщений.
В Pepsi добавлен математический приоритет потому что так проще и понятнее для пишущего программу. Я почему-то думал что в Newspeak тоже привинчен приоритет.
К слову платформа COLA создаётся не Аланом Кеем, но его последователями в Viewpoints Research Institute.
Вот не верю, что сотрудники института без Кея (директора института) начали разработку под громким названием «Перевернем мир программирования» :))
Глянул в спеку: Newspeak сохранил смолтоковские приоритеты посылки сообщений
Программу институт, понятное дело, начал под присмотром Кея, но COLA это только часть его. Тут только объектная модель + платформа. В проект много чего входит кроме этого.
Я имел ввиду то, что Кей занят руководством и работой с общественностью. Инновациями заняты подопечные. Не все же ему самому делать )
Я уже про такую вещь, как «1 + 1 = 10», начисто снесшую меня в свое время с пути понимания этой жизни подумал…
lisp, scheme с его префиксной записью :)
forth в туже копилку
бох с вами. 2*2+1. в форте будет 1 ;)
Ну так отсутствие таблицы приоритетов операторов в J — одна из особенностей языка. Тем, кто его изучает, это сразу вдалбливают в голову.
А мне больше K нравится. Но что один, что другой — гуглятся проблематично )
Так и не нашел интерпретатора K, который бы умел деление по модулю.
Если у кого есть — поделитесь )
Модно… по заграничному…
Понятно что пример и задачка могла быть сложнее, но,
блин, повеселило, это же как должно быть не до того что проще переспросить у интерпретатора)

Brainfuck выносит мозги гораздо эффективнее.
Вот только J, в отличие от brainfuck, не является эзотерическим языком.

Не в курсе, что там пишут на J, но на очень похожем языке под названием K написана высокопроизводительная база данных kdb. dr-klm писал про нее (там же в жж, кстати, много информации по J):
Язык K получился проще, компактнее, и оказался отлично приспособлен к сфере баз данных. Компания Уитни (Kx Systems) разработала на этом языке реляционную базу данных под названием kdb, являющуюся на сегодняшний день продуктом-лидером в этой области и превосходящую, в частности, широко разрекламированный Oracle по скорости на тестах TPC. Ходят слухи, что исходники базы данных kdb (поддерживающей SQL, ODBC, JDBC, удаленный доступ по http и множество других функций, стандартных в этой области) хранятся в 26-ти, названных однобуквенными именами, текстовых файлах, содержащих, каждый, примерно один полный стандартный экран кода, просмотреть который можно без скроллинга. Еще говорят, что в kdb нет ни одного цикла. Может быть эти слухи и неправда, но то, что дистрибутив kdb полностью (вместе с интерпретатором K, примерами), занимает (всего !) 200 килобайт — это доступный независимой проверке факт.
круто (:
такая компактность впечатляет. думаю, при этом ещё и код читабилен…
ух ты. фантастика какая-то. пошел читать.
Как ни странно, мне на Brainfuck писать гораздо проще. Пруф — примеры с progopedia.ru/language/brainfuck/.
В этом языке глаголы (любые действия над данными, в том числе и арифметические операции) не имеют приоритета и в отсутствие скобок выполняются справа налево.


«Но мы его любим не за это» :)
> вы переадресовываете вопрос своему интерпретатору, который честно отвечает: 6
ну, 6-то почему?
Ваш интерпретатор неправилен и не знает о приоритете операций, вот он и отвечает непойми что… :)

(2*2)+1 = 5
2*(2+1) = 6
НЛО прилетело и опубликовало эту надпись здесь
что-то пошло не так…
что не так-то? всё правильно.
ааа, я поняяял почему я не понял!
> вы переадресовываете вопрос своему интерпретатору
«у меня» интерпретатор J

отвлекаясь: а почему племянник? намек на то, что у программистов с детьми напряг? Или дети программистов родителей по таким пустякам не тревожат, а сами переадресовывают свой вопрос куда надо?
Если ребенок программиста в первом классе (потому что до школы двойку получить сложно) не сможет ни посчитать это в уме, ни запустить калькулятор, родители от него отрекутся :-) На самом деле я просто еще достаточно молода, чтобы мне было проще представить общение с племянником, чем с ребенком :-)
Excel 2003 помню так шутил надо мной…
2+2=5 выполняется для такого кольца или поля, в котором нету 4 ( для тех кто в танке — имеем значения 0,1,2,3,5,6… 2+2==4ый элемент. Но это 5, это, в принципе, обычная алгебра :) )
На сайте языка:
WHY J?:
J is particularly strong in the mathematical, statistical, and logical analysis of data.

Думаю отсутствие приоритетов в арифметических действиях сделано, чтобы программисты математических и статических приложений всегда имели на уме себе привычку расставлять скобки, чтобы потом не было смутных мест :)
НЛО прилетело и опубликовало эту надпись здесь
из-за чего они выбрали порядок справа налево?)
В винде обычный и инженерный калькулятор считают по-разному, а вы тут говорите.
Попробуйте:
2+2*3
«для большинства из нас (2*2)+1, а 2*(2+1).» — коль речь идет о порядке операций, то «2*(2+1)» следует заменить на (2+1)*2 ;-)
Этот вопрос уже затрагивался в обсуждении необычной ассоциативности тернарного оператора в PHP.
Возможно, но в марте 2009 года я Хабр еще и близко не читала, а столкнулась с этим буквально на днях.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории