Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.221.141.44] |
|
Страницы: (5) 1 2 [3] 4 5 все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
В глубь языка Python Цитата Python поддерживает интересный синтаксис, позволяющий определять небольшие однострочные функции на лету. Позаимствованные из Lisp, так назыаемые lambda-функции могут быть использованы везде, где требуется функция. |
Сообщ.
#32
,
|
|
|
Пардон, вспомнил, что адекватные, но ограниченные.
|
Сообщ.
#33
,
|
|
|
Как там было у классика?.. "Горе от ума"?
Все эти for_each и т.п. лямбды понятности в код не добавляют. Короче, я так и не понял, куда это - ф сад или ф топку. ... ну, вот например: Цитата for( int i = 0; i < vec.Size(); i++ ) { if( CheckCondition( vec[i] ) ) { break; } } Посмотрю я на код через .. ну скаже, 10 лет. И всё будет понятно. Чего не скажешь о прожжоном STL коде. Да, если особо не злоупотреблять, то он будет таким же понятным. И почти без накладных расходов. именно за это я люблю C++ + STL::контейнеры. |
Сообщ.
#34
,
|
|
|
Цитата BugHunter @ Посмотрю я на код через .. ну скаже, 10 лет. И всё будет понятно. Угумс... Угумс... Только тебе нужно 5 строчек для того, для чего мне потребуется 1, и эта одна будет работать несколько эффективней и быстрее: vector<...>::iterator p = std::find_if(vec.begin(), vec.end(), CheckCondition); |
Сообщ.
#35
,
|
|
|
BugHunter, а твоя мегаконструкция связанные списки обработает? Все так же понятно?
|
Сообщ.
#36
,
|
|
|
И еще скажи, что этот код не понятен, и не читабелен. Для того, чтобы понять, что делает твой код, мне нужно просмотреть 3 строчки (for + if + break). В моем случае - одна, в которой явно указывается производимая операция. Почувствуй разницу.
|
Сообщ.
#37
,
|
|
|
Цитата BugHunter, а твоя мегаконструкция связанные списки обработает? Все так же понятно? Связные списки она не обработает. ПОтому что они не поддерживают random access iterator. И фигли? Но этого и не было в начальном условии. Ну хоспади, заменил бы i на std::list<...>::iterator, Size() на .end(), и всё ништяк. Цитата В моем случае - одна, в которой явно указывается производимая операция. Тут главное, не увлечься. Поскольку плоский int я храню в контейнерах нечасто (точнее, часто, но над ними извращений не делается), а какие нибудь классики, то тут начинается беда с биндерами и пр. mem_fun_ref, что ОФИГЕННО добавляет читаемости в коде (злая шутка). Добавлено Цитата Только тебе нужно 5 строчек Я и на русском, и на буржуйском бью 250 знаков в минуту, так что фигня война. Реализация непосредственно алгоритма занимает процентов 15-20% времени (максимум), затраченного на задачу. |
Сообщ.
#38
,
|
|
|
Блин, опять в оффтоп скатились чтоли?
|
Сообщ.
#39
,
|
|
|
Почему оффтоп?
Перевожу последние свои посты на русский. Lisp ф топку, и извращённый C++ - туда же. Сосредоточимся на задачах, а не языковых средствах и синтаксических сахарах. |
Сообщ.
#40
,
|
|
|
Цитата BugHunter @ Сосредоточимся на задачах, а не языковых средствах и синтаксических сахарах. Lisp как раз и позволяет это сделать, в отличие от... |
Сообщ.
#41
,
|
|
|
ну да, ну да.
(defun make-logger (filename) (let ((log (open filename :direction :output :if-does-not-exist :create :if-exists :append))) (values (lambda (string) (format log "~a~%" string)) (lambda () (close log))))) что здесь хотел афтор - хрен его не разберёт, а я даже и пытаться не буду. Вот, например, код на Java или C# или даже Pascal - мне понятен всегда, несмотря на то, что я никогда их не изучал специально. |
Сообщ.
#42
,
|
|
|
Цитата BugHunter @ а какие нибудь классики, то тут начинается беда с биндерами и пр. mem_fun_ref, что ОФИГЕННО добавляет читаемости в коде (злая шутка). Ну так сейчас mem_fun_ref'ами никто практически и не пользуется. Все больше boost::bind'ерами... Но ты ведь boost не пользуешь - тебе нельзя... Цитата BugHunter @ Я и на русском, и на буржуйском бью 250 знаков в минуту, так что фигня война. Реализация непосредственно алгоритма занимает процентов 15-20% времени (максимум), затраченного на задачу. Дело не в том, как быстро ты (или я) по клаве стучишь, а в том, какими сущностями оперируешь. Я оперирую алгоритмами. Ты (судя по всему) - простыми языковыми конструкциями... |
Сообщ.
#43
,
|
|
|
Цитата BugHunter @ что здесь хотел афтор - хрен его не разберёт, а я даже и пытаться не буду. Я со всего только форматную строку не понял, ибо не ртфмил. Все остальное как на ладошке. |
Сообщ.
#44
,
|
|
|
~a == aesthetic (печать аргумента в красивом виде)
~% == \n Все остальное понятно, потому что там, где в C/C++/Pascal применяют хитрые языковые конструкции, в Lisp'е пишут чуть ли не на естественном языке. Фнукциональные языки, как правило, позволяют писать более выразительный и понятный код. Добавлено Цитата BugHunter @ Вот, например, код на Java или C# или даже Pascal - мне понятен всегда, несмотря на то, что я никогда их не изучал специально. Так они все похожи как сиамские близнецы. Человеку, далекому от программирования Lisp ИМХО будет выглядеть понятнее. Зацени подсчет чисел Фибоначчи: (loop repeat 5 for x = 0 then y and y = 1 then (+ x y) collect y) Читается идеально: repeat 5: повторям цикл пять раз; for x=0 then y: изначально x приравниваем к 0, а на каждой последующей итерации присваиваем x значение y and y = 1 then (+ x y): а y изначально приравниваем к 1, а на каждой последующей итерации присваиваем y значение x+y collect y: результатом выполнения цикла будет список из значений y Думаю, плюсовые заморочки были бы менее очевидными. |
Сообщ.
#45
,
|
|
|
Цитата linuxfan @ Человеку, далекому от программирования это будет темный лес.Человеку, далекому от программирования Lisp ИМХО будет выглядеть понятнее. Цитата linuxfan @ Может быть идеально, когда знаешь. А когда нет - берешь словарь и разбираешь:Читается идеально: for x = 0 then y | для x=0 затем/потом/тогда y Что затем y? Или что потом y? x затем y? Или просто затем y? А зачем(когда) затем? Или когда тогда? and y = 1 then (+ x y) | и y=1 затем/потом/тогда (+ x y) Аналогично. А что такое + x y? Это ж еще объяснить надо про инфиксную запись. Оно и dcfsnz x,1 читается идеально, когда знаешь, что это. |