LINUX.ORG.RU
Ответ на: комментарий от lazyklimm

у меня кстати, с момента знакомства с лиспами чаша симпатий то в одну, то в другую сторону колеблется :)

В сравнении с CL, работа со строками в Scheme - божественна!
http://4.flowsnake.org/archives/29

iVS ★★★★★
()
Ответ на: комментарий от PolarFox

Я бы сказал

: f ( x y z -- t)
    drop [ dup * ] dip     ! x², y
    [ dup * ] [ abs ] bi - ! x², y² - |y|
    + ;
Но внезапно можно
USING: kernel locals math ;

:: f ( x y z -- num )
    x sqrt y sqrt + y abs - ;
так как подобные языки практически не ограничены в расширении.

quantum-troll ★★★★★
()
Последнее исправление: quantum-troll (всего исправлений: 1)

Хватит уже искать кривости в популярных ЯП. Ини б не взлетели, если б были настолько кривы.

П.С. Некоторые упоминали тут asm, так вот - формально это не ЯП.

segfault ★★★★★
()

Красота языка субъективна, и зависит от задачи. Мне нравится C и ObjectPascal.

Archer73
()
Ответ на: комментарий от tailgunner

как в Аде: def «+»(a, b), как в Си++: def operator+(a, b).

Интересно, зачем в питоне переопределять операторы?

Да мало ли прикольных значков... %, $, &

У вас перл отклеился... :)

alienclaster ★★★
()
Ответ на: комментарий от alienclaster

Затем же, зачем и в других ЯП?

По сабжу - чем лучше ЯП знаешь, тем больше видишь в нем недостатков. В этом смысле конечно питон и С++ для меня верх красоты и уродства одновременно;-)

Создателей питона за одно разделение на изменяемые/неизменяемые объекты уже прокляло 100500 кодеров.

AIv ★★★★★
()

Справедливости ради, симпатичными получились некоторые *ML и racket, но и они не лишены изъянов, особенно страдают реализации.

alienclaster ★★★
()
Ответ на: комментарий от AIv

Интересно, зачем в питоне переопределять операторы?

Затем же, зачем и в других ЯП?

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

Создателей питона за одно разделение на изменяемые/неизменяемые объекты уже прокляло 100500 кодеров.

«Какой из меня, к черту, писатель, если я ненавижу писать. Если для меня это мука, болезненное, постыдное занятие, что-то вроде выдавливания геморроя» :P

Тяжело вам, наверное.

alienclaster ★★★
()
Ответ на: комментарий от alienclaster

Если ты не собираешься переопределять семантику ЯП средствами самого ЯП,

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

Тяжело вам, наверное.

Нам нормально. А вот вам, с Вашим геморроем вредно сидеть за компьютером наверное?;-)

AIv ★★★★★
()

Если под красотой ЯП понимать синтаксис — Python, Lisp.
Если в плане красивых вещей то однозначно C++.

comp00 ★★★★
()
Ответ на: комментарий от AIv

Нам нормально. А вот вам, с Вашим геморроем вредно сидеть за компьютером наверное?;-)

В приведенной выше цитате речь идет именно о вашем, неумело съезжаете, сударь.

в наших задачах перегрузка операций юзается очень активно

Соболезную. В команду, поди, набираете одних алкашей «без поллитры неразберешься все дела»? :)

alienclaster ★★★
()
Ответ на: комментарий от actics

Шарп это ява для неосиляторов.

Это более шустрая, но менее кроссплатформенная ява.

MiniRoboDancer ★☆
()
Ответ на: комментарий от alienclaster

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

Насчет нашей команды - подобные заявления сделанные при острой нехватке информации (а откуда бы Вам ее взять?) позволяют сделать довольно однозначный и нелицеприятный вывод о Вашем интеллектуальном уровне.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Не думаю, что бы у Вас был доступ к моей мед.карте.

Это цитата из фильма о писательстве, а не о ваших картах.

Насчет нашей команды - подобные заявления сделанные при острой нехватке информации

Если в какой-то коммандо держат вас - значит команда булшит.

позволяют сделать довольно однозначный и нелицеприятный вывод

Не уверен, что вы вообще можете сделать хоть сколько-нибудь похожее на вывод заявление...

о Вашем интеллектуальном уровне.

Не льсти себе, лучше фильм процитированный посмотри.

alienclaster ★★★
()
Ответ на: комментарий от true_admin

я больше не буду:-)

У него в избранных тегах много вкусного, мог бы и не нести чуши - видать когда то перегруженным оператором че то прищемило...

У меня для контейнеров прегружен оператор присваивания, типа написал А=0 и забил весь массив. Как то в цикле забыл индексацию поставить,

for(long i=0; i<A.N; i++) A = f(i);
как назло массив был здоровый. Кластер встал колом, я давай изучать явление - типа с памятью проблемы все дела... квадратичная зависимоть от размера данных... O_O

AIv ★★★★★
()
Ответ на: комментарий от alienclaster

«Не стучите лысиной по паркету». Обосновать вредоносность перегрузки операторов могете, или опять на фильмец какой ссылаться будете?

AIv ★★★★★
()
Ответ на: комментарий от AIv

Уже ответил - операторы сами по себе уродство, на их месте должны были быть функции из стандартного «пакета», стандартной библиотеки или дефолтного пространства имен.

alienclaster ★★★
()
Ответ на: комментарий от true_admin

У меня тут на больную голову пришла дурная мысль. Есть ЯП (скажем питон), который меня ну-почти-во-всем-устраивает. Не устраивают в частности некоторые ограничения синтаксиса, ну например то что я не могу новых операторов вводить;-)

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

Я такое сделал для скобочек (у нас иногда их много) - зело удобно вышло. Пишешь скажем {%a+b%} и имеешь на выходе красивую формулу в Тех-е с фигурными скобками. М.б. ввести скажем оператор генерации последовательности

a..b -> range(a,b)
и т.д.? Такой подход как нить называется?;-)

AIv ★★★★★
()
Ответ на: комментарий от alienclaster

Я бы с бааальшим удовольствием поглядел, как Вы будете бол-мен сложное алгебраическое выражение кодить в таком стиле.

Вопросов к докладчику больше не имею.

AIv ★★★★★
()
Ответ на: комментарий от AIv

DSL?

Если бы я не знал по твоим постам, что тебе питон для науки нужен, я бы посоветовал тебе с твоими х..у перейти на руби)

cdshines ★★★★★
()
Ответ на: комментарий от AIv

А сам подумай - в техе сумму как записываешь? Вот-вот.

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

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Да я так понимаю что руби это те же яйцы, тока в профиль. Стар я уже ЯП менять;-)

Не совсем DSL. наск я понимаю, придумать хороший ЯП под узкую задачу это отдельная тема. Я просто хочу чуть-чуть расширить ЯП общего назначения, что бы на нем було удобней решать какие то свои задачи (потому что я не хочу ЗАменять функционал ЯП - мне прсото не хватает существующего;-)).

AIv ★★★★★
()
Ответ на: комментарий от cdshines

Фсе просто, (mul i j) это 9 символов, i*j это 3 символа. Теперь у тебы выражение, которое занимает экран. В вашей префиксной записи оно будет занимать ТРИ. Это ппц, я вам скажу...

Не говоря про проблемы с кодогенерацией (выводом из CAS) и генерацией отчетов ТеХ.

PS Сумма в ТеХ это тащем то аналог цикла. Цикл тоже префиксную записать имеет, это нормально и общепринято. Но если я предложу коллегам перейти на префиксную запись для +-*/, они меня пошлют, и будут правы, потому что никаких реальных профитов это не дает, а проблем куча.

AIv ★★★★★
()
Ответ на: комментарий от Sadler

В контексте языка их не существует, есть лишь последовательность нот и пауз. Это уже логические структуры высшего порядка.

А что вы думаете: о доминанте и субдоминанте, в контексте нот и пауз?

Total_Armageddon
()
Ответ на: комментарий от AIv

препроцессинг и кодогенерция могут быть любыми. Я тут на лоре слышал кто-то m4 совместно с C использовал.

Кстати, идею Гвидо о том что питону не нужны макросы я не поддерживаю.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от Total_Armageddon

А что вы думаете: о доминанте и субдоминанте, в контексте нот и пауз?

Пусть композиция содержит лишь ноты A,B,C,D,E,F,G. Где тут доминанта и субдоминанта? Ответ неоднозначен. Отсюда вывод — это, опять же, структуры другого уровня, нотная запись как таковая ими не оперирует.

Т.е. язык как таковой не завязан на гармонию.

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 2)
Ответ на: комментарий от true_admin

Э... я могу вкрутить питону макросы, я только не понимаю что я буду сними делать? Видимо инертность мышления;-(

AIv ★★★★★
()
Ответ на: комментарий от AIv

Я бы с бааальшим удовольствием поглядел, как Вы будете бол-мен сложное алгебраическое выражение кодить в таком стиле.

Мне Matlab подсказывает, что A*B - матричное умножение, A.*B - поэлементное. У меня есть мнение, что как раз синтаксис Matlab стал убийцей FORTRAN'а, что в научных кругах - так точно. Если скорость не критична, то Matlab по удобству выносит FORTRAN в одну калитку. Ну а по поводу скорости, FORTRAN уже не самый быстрый, компиляторы C/C++ давно его догнали.

iVS ★★★★★
()
Ответ на: комментарий от AIv

Арифметические операции (7) + - * / ** // % и операторы сравнения (6) == < > <= => !=, остальное все равно придется записывать функциями. Учитывая, что под операциями сравнения не всегда понимаются их бинарные реинкарнации, остается самый примитив - арифметика 1-го класса. Которая ВНЕЗАПНО оказывается тоже не бинарной. И умножение, и деление. А теперь возьми много операндов и перемножь их.

Python: aaa * bbb * ccc * ddd * eee * wtf
Lisp: (* aaa bbb ccc ddd eee wtf)

Добавим элементарную сумму и функцию.

Python: aaa * bbb * (ccc + fff + ggg + hhh) * ddd * eee * func (wtf, wat, rtfm)
Lisp:

(* (+ ccc fff ggg hhh)
   (func wtf wat rtfm) 
   aaa bbb ddd eee )))

Lisp, читаю: произведение суммы, функции-такой-то и свободных параметров. Python - парсим глазами. IRL (+) тоже уйдет, потому что не семантика. Сумма осмысленных параметров - это определение какой-то еще функции, так что будет что-то типа:

(f (sum-of-term-weight term-regress k-point-start min-range max-range)
   (number-of-approx-points start step mistakes-max-n end end-default)
   flag-continue-with-errors
   optimization-flag
   arch-flag
   app-time-alive-max-secs)))

Здесь я вижу f с заданной семантикой на уровне идентации, значащими параметрами и флагами. Если параметров во вложенных функциях становится много - добавляем уровень идентации. Алгоритм описан функционально (превед математика), арифметические операции спрятаны в потрохах определений. А просто «какие-то волшебные числа» в вызов запихивают разве что бакланы, для этого делают специальный блоки инициализации и в них тюнять, что надо. В функциях остаются одни определения. Ты можешь так же написать в Python -> и получишь Lisp с неуниформным вызовом лжефункций-операторов, функций, килограмм глазного парсинга или такое же (!) количество скобок как и в лиспе, да-да. Ну, если ты пользуешься в основном операторами (не функциями) бинарными - да, будет чуть многословно. Но я в этом сильно сомневаюсь.

alienclaster ★★★
()
Ответ на: комментарий от AIv

Фсе просто, (mul i j) это 9 символов, i*j это 3 символа.

(* i j) - 7 символов, i * j - 5. Теперь следи за руками: (* 1 2 3 4 5 6 7 8 9) = 21 символ, (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9) = 35 символов, уберем пробелы, снизив читабельность, ведь IRL тут будут не цифры а название параметров, но ничего, получим: (1*2*3*4*5*6*7*8*9) ту же разницу в 2 символа, и чем длиннее будут числа, именованные параметры, тем разница в процентном соотношении будет сокращаться :)

В вашей префиксной записи оно будет занимать ТРИ.

Как выясняется, нет. Занимать будет чуть больше места, речь о процентах. Но читабельность повышается значительно, кроме того из имеративного «возьмем гвозь, добавим к нему еще 3, и еще 9 гвоздей) получаем декларативную сумму кучек по 1, 3 и 9 гвоздей.

alienclaster ★★★
()
Ответ на: комментарий от true_admin

Кстати, идею Гвидо о том что питону не нужны макросы я не поддерживаю.

Он наоборот говорил, что если придумают нормальный синтаксис для макросов и он будет кому-нибудь нужен - не исключено, что в какой-то Python их включат.

alienclaster ★★★
()
Ответ на: комментарий от alienclaster

Теперь следи за руками: (* 1 2 3 4 5 6 7 8 9) = 21 символ, (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9) = 35 символов

Это синтетические примеры. Давай посмотрим на реальный код. В том коде что я работаю 99% арифметических выражений либо вообще короткие, либо не состоят из одного только умножения. Я верю что и такие задачи встречаются в жизни. Но они всего лишь маленькое подмножество. Потом я не записываю сложную арифметику в одну строчку. Я делаю промежуточные присваения.

Если мне надо будет много чего перемножить (или выполнить другую операцию) я сделаю product [1...9] или product [a,b,c,d] итп.

true_admin ★★★★★
() автор топика

Самым красивым считаю лисп. Не пишу на нем и не знаю его, но с точки зрения синтаксиса он божественен.

Ну и питон тоже ничего.

vurdalak ★★★★★
()
Ответ на: комментарий от Sadler

Пусть композиция содержит лишь ноты A,B,C,D,E,F,G. Где тут доминанта и субдоминанта? Ответ неоднозначен. Отсюда вывод — это, опять же, структуры другого уровня, нотная запись как таковая ими не оперирует. Т.е. язык как таковой не завязан на гармонию.

В данной вами последовательности нот, должна определенна тоника (переменная), за исключением какофонического приема. Как следствие вытекают и другие переменные. А где что образуется, это по усмотрению гармонической мысли автора. Нотная запись обязывает автора, знать нотную грамоту, не исключая музыкальную гармонию. Что само за себя говорит, о присутствии переменной.

Total_Armageddon
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.