Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2013, 11:53   #21
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

В одну строку можно заколбасить, но "readability counts".

Код:
def qsort(lst):
    return [] if not lst else qsort([x for x in lst[1:] if x < lst[0]]) + [lst[0]] + qsort([x for x in lst[1:] if x >= lst[0]])
Код:
def qsort(lst):
    if not lst: 
        return []
    else:
        pivot = lst[0]
        left = qsort([x for x in lst[1:] if x < pivot])
        right = qsort([x for x in lst[1:] if x >= pivot])
        return left + [pivot] + right
Собственно использование в разумных пределах list comprehensions (списковых выражений, или как правильно перевести?) и человеческого тернарного оператора очень часто помогает сократить питонячий код, не превращая его в перл. Питон довольно лаконичен
пыщь
JTG вне форума Ответить с цитированием
Старый 11.06.2013, 12:57   #22
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
списковых выражений, или как правильно перевести?
По смыслу больше "генератор списков" подходит )

Вариант на руби с wiki, добавляет к классу array метод qsort:

Код:
class Array
   def qsort
      return self.dup if size <=1
      l,r = partition   {|x| x <= self.first}
      c,l = l.partition {|x| x == self.first}
      l.qsort + c + r.qsort
   end
end
Чем изучение Haskell/Python вредит программисту
Kostia вне форума Ответить с цитированием
Старый 11.06.2013, 13:31   #23
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Чем изучение Haskell/Python вредит программисту
Статья ни о чем.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.06.2013, 16:57   #24
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Kostia
Цитата:
По смыслу больше "генератор списков" подходит )
не, генерация это скорее Computation Expression
the_deer_one вне форума Ответить с цитированием
Старый 11.06.2013, 18:09   #25
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Просто вот это:
Код:
[y | y <- xs, y >= x]
[x for x in lst[1:] if x >= lst[0]]
{|x| x >= self.first}
На великом и могучем обычно называют генераторами списков, но в любом случае название сути не меняет.
Цитата:
Сообщение от Utkin
Статья ни о чем.
А вот лично я впервые столкнулся с подобной проблематикой после постижения PHP, затем все усугубилось после изучения прототипов JS и плюшек Ruby, и совсем все плохо стало когда начал постигать Haskell, который не только лаконичней С(в среднем раз в 10 меньше кода), но и быстрее o_O в скорости выполнения раза ~2(Душкин Р. В. Функциональное программирование на языке Haskell c. 48). Когда на работе только C++ и C#, то это несколько напрягает, благо в C++ есть шаблоны и можно творить шаблонную магию. =)
Kostia вне форума Ответить с цитированием
Старый 11.06.2013, 19:03   #26
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Цитата:
который не только лаконичней С(в среднем раз в 10 меньше кода), но и быстрее o_O в скорости выполнения раза ~2(Душкин Р. В. Функциональное программирование на языке Haskell c. 48).
Мм.. магические числа? Качнул. С 48:
Цитата:
вспомним, что даже сокращение количества исходного кода производится в среднем в десять раз, не говоря о прочих плюсах функциональных языков
... Для некоторых задач после компиляции функционального кода наблюдалось увеличение производительности до двух раз по сравнению с языком С.
Что значит "для некоторых задач"?
Исходный код в 10 раз короче - это с учетом комментариев или без них? Или коду на Хаскеле положен отдельный, внеконкурсный FAQ?
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 11.06.2013 в 19:05.
MihalNik вне форума Ответить с цитированием
Старый 11.06.2013, 19:24   #27
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
и совсем все плохо стало когда начал постигать Haskell, который не только лаконичней С(в среднем раз в 10 меньше кода), но и быстрее o_O в скорости выполнения раза ~2(Душкин Р. В. Функциональное программирование на языке Haskell c. 48).
И тут народ начинает расчехлять половые члены и давай ими меряться.
1. Лаконичность как основная тема имеет и обратные стороны. Конкретней - в 10 раз меньше кода означает как правило код в 10 раз менее понятный и соответственно в 10 раз более трудно отлаживаемый и имеющий высокую вероятность (ну тут в цифрах выразить не могу) больше ошибок. Это просто обратная сторона медали и ничего тут особенного пока не придумано.
2. Про скорость выполнения сравнения опять таки смешно - давайте начнем сравнивать скорость при работе рубанком со скоростью при работе отверткой. А поскольку сравнивать нужно адекватно - будем сравнивать работу обоих инструментов при забивании гвоздей в алюминевый профиль. И потом Вы думаю сами понимаете, что скорость не является свойством языка. Скорость это свойство реализации, то есть качественный показатель транслятора. И здесь сравнение скоростей к примеру интерпретируемой и компилируемой программы опять же сводит нас к размахиванию все теми же мужскими половыми органами.
Цитата:
А вот лично я впервые столкнулся с подобной проблематикой после постижения PHP, затем все усугубилось после изучения прототипов JS и плюшек Ruby, и совсем все плохо стало когда начал постигать Haskell, который не только лаконичней С
О, как это узнаваемо. Давайте будем продолжать сравнивать языки высокого уровня и языки сверхвысокого уровня и будем по-прежнему мочиться от счастья. Хотите аналогию? Вы сравниваете Дельфи и Ассемблер. Или к примеру если брать автомобили - Вы сравниваете шестерку классику с каким-нибудь мерседес бизнес класса.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 11.06.2013 в 19:37.
Utkin вне форума Ответить с цитированием
Старый 12.06.2013, 04:17   #28
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
И потом Вы думаю сами понимаете, что скорость не является свойством языка. Скорость это свойство реализации, то есть качественный показатель транслятора.
И это тоже, но основное напрямую зависит от языка, на сколько просто анализировать его и можно ли вообще провести анализ.
Те же структурные схемы программ достаточно легко анализировать, точно также как и декларативные и функциональные.
Поясню, почему сети Петри лучше подходят для моделирования процессов, чем конечные автоматы(будем воспринимать их как 2 языка программирования, один выше другого):
1. В случае с конечными автоматами нужно определиться какой именно автомат лучше подойдет для моделирования(одноленточный, многоленточный, двухголовочный).
2. В случае с конечными автоматами сравнить разные типы автоматов невозможно.
3. В случае с конечными автоматами достижения конечного состояния не гарантируется и выполнить какой либо прогноз трудно, либо невозможно.
1. В случае с сетями Петри, первой и второй проблемы просто нет.
2. В случае с сетями Петри, они всегда достигают конечного состояния, т.е. всегда можно сказать в какую часть сети фишки никогда не попадут, где они будут копиться бесконечно, а где процесс гуляния фишек остановится.
Цитата:
О, как это узнаваемо. Давайте будем продолжать сравнивать языки высокого уровня и языки сверхвысокого уровня и будем по-прежнему мочиться от счастья. Хотите аналогию? Вы сравниваете Дельфи и Ассемблер. Или к примеру если брать автомобили - Вы сравниваете шестерку классику с каким-нибудь мерседес бизнес класса.
Вполне сравнимы Дельфи и Ассемблер - как языки программирования, Шестерка и Мерседес - как автомобили. Структурные схемы программ, конечные автоматы и сети Петри - как подходы к моделированию процессов, но если попытаетесь сравнить конкретный конечный автомат с сетью Петри, которая моделирует тот же процесс, то этого сделать не получится, т.к. сравниваемые объекты должны относиться к одному и тому же классу.
И на самом деле, чтобы сравнивать языки, нужно действительно находиться на вершине, только в таком случае можно будет разглядеть все недостатки, нюансы языков ниже, а если поступать наоборот, то ничего не выйдет, т.к. осознать преимущества более высокоуровневых языков не получится(вопрос про фанатичность).

Исходный код в 10 раз короче - это с учетом комментариев или без них? Или коду на Хаскеле положен отдельный, внеконкурсный FAQ?

Последний раз редактировалось Kostia; 12.06.2013 в 04:42.
Kostia вне форума Ответить с цитированием
Старый 12.06.2013, 06:12   #29
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Kostia, Вы сообщения JTG, Utkin'a (п.1) пропустили?
Я вроде вот нигде не спрашивал про кол-ва строк кода. А то, знаете ли, все можно закатать в одну строчку. Названия сократить (вплоть да a,b,c,d,...ab,ac,ad...). А где граница исходно вот этого с лаконичностью:
http://ru.wikipedia.org/wiki/%D0%9E%...86%D0%B8%D1%8F
?
Поэтому и спрашиваю еще раз: что будет в свете "код с комментариями"?
Поскольку анонимная абстракция, по определению не может быть само документированной. А также - как насчет ее рефакторинга через полгода? Настолько же "умна" IDE, сколь и язык?
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 12.06.2013, 07:03   #30
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Цитата:
А то, знаете ли, все можно закатать в одну строчку.
Можно:
Код:
for (i=0; i<100; ++i) printf("привет"); // Сколько здесь строк кода?
Тут 2 логические строчки кода. Что не ясно?
Цитата:
Поэтому и спрашиваю еще раз: что будет в свете "код с комментариями"?
Странный вопрос, комментируйте код как хотите и сколько хотите
Цитата:
Названия сократить (вплоть да a,b,c,d,...ab,ac,ad...). А где граница исходно вот этого с лаконичностью
Для этого придумали Code Conventions *.
Цитата:
Поскольку анонимная абстракция, по определению не может быть само документированной.
Что-то я не понял, о чем вы?
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопросик самым опытным :-) Doholyan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 25.08.2009 17:13
Проблема с синтаксисом? Geddar PHP 1 30.06.2008 16:44
Казус с синтаксисом???... Sota Общие вопросы C/C++ 6 17.07.2007 19:15