Как стать автором
Обновить
1
0
Дмитрий @dima_mendeleev

Пользователь

Отправить сообщение
Что-то на волне с макросами забыл о существовании функций))) Может по-этому они зло
Конечно можно, это даже лучше будет, поскольку литерал не будет копироваться еще раз.
Если одну задачу можно решить двумя способами, то зачем тогда первому решению давать название второго? Ну ладно, если дали — но это как раз и сбило с толку.

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

*теперь торт!!!
з.ы. вот видите, иногда очень полезно поспрашивать после лекции.
Согласен с коментом. Я ждал каких то механизмов для действительного изменения порядка выполнения, возможно через сетжамп/лонгжамп, или без них (хотя и не представляю как — но, думаю было бы интересно).
а вы друзьям своим похвастайтесь, может они оценят, нам то зачем? может мы все тут неадекватные тролли?
то что вам кто-то напишет «Оо, чувак жжеш, круто!!!» не сравнится с похвалой человека, которого знаешь — это еще один минус в огород интернета, из-за него атрофируются нормальные человеческие отношения
Надо бы мораль пошире изложить)))
Спасибо, очень эпически, такой себе боевичек с неожиданной концовкой получился
да да да, лямбда исчисление, Барендрегт, Лямбда куб и многое другое:)
… я имел ввиду, что уже есть возможность написать безопасный printf на C++.
Cayenne, кстати не обязательно, есть ведь давно уже такое и на Variadic templates, по ссылке и printf безопасный есть.
… там также есть упоминания о приведенном в топике.
Это по теме о «умных» грибах iee.org.ua/ua/news/99/
Извините, но и ссылки на Haskell я убрать не могу, поскольку то, что о нем упоминается, относиться к «спору», о котором я говорил в начале статьи. То есть это, по сути, цитата.
Перестаньте искать сложные пути! Почему бы просто не скачать код и не попробовать? А то о чем вы пишете, делается так:
auto f1 = partApp<3, 1, 2, 0>(f)(a1, a2);

з.ы. вы точно не внимательно читали — об этом было написано.
Я вообще-то не собирался соревноваться с «boost::bind», но про отложенный вызов мне понравилось. Спасибо.
Спасибо, но по-моему вы невнимательно читали. Из того, что вы назвали действительно только:
1. нумерация с нуля — легко исправить;
2. ненаглядный синтаксис — имеет свое преимущество: пользуясь, вы как бы говорите:
auto f1 = partApply<3, 0>(f)(x, y); // передаю третий аргумент, а потом нулевой

3. и работа с членами — я нарочно специализировал шаблоны только для std::function — так было проще. Это возможно, действительно, минус, но он тоже легко устраняется дополнительной [тривиальной] специализацией.
С вами полностью согласен, но переименовывать статью в «Эмуляция каррирования и частичного применения» не буду=)
Сейчас очень часто приходиться слышать, как некоторые вещи называют не теми именами, но что поделаешь, эти названия модные, и они привлекают к себе внимание. Спекуляция поделила их значения на две группы: точные (те, например, что привели вы) и популярные (те, которыми оперировал я).
Мне самому это не нравиться, но мы как-то не вольно в это втягиваемся — что же, будем бороться.
з.ы. за объяснения огромное спасибо, никогда над этим не задумывался.
извините, нечаянно нажал…

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

з.ы. Вы могли бы мне кинуть информацию о каррировании и частичном применении в Хаскеле? Буду очень благодарен.
Но я же указал, в каком смысле сравнивал эти два понятия.
Нащет уровня встроености чего-то в язык, каюсь, что настолько строго данный вопрос не рассматривал, но нету ведь особой разницы: компилятор этим занимаеться или библиотечная функция. Я наведу пример з Nemerle:
Конечно, пожалуйста.
Каррирование — это представление функции от нескольких аргументов в виде функции, что принимает первый аргумент и возвращает функцию, которая, в свою очередь, принимает второй аргумент и так далее до результата.
Частичное применение — это передача функции части аргументов, получая при этом функцию, что принимает остальные аргументы.
По-этому, если рассматривать данные возможности с точки зрения их одноразового применения, то есть, если имеются две функции, первая из которых каррированна, а с другой можно проводить частичное применение, то в случае с каррированной функцией можно зафиксировать только первый аргумент, а в случае с частично применяемой — любой или любые. То есть в этом смысле каррирование есть частный случай частичного применения.
Что касается «или достаточно иметь только каррирование (как, например, в Haskell)» — это мысль не моя и на нее я уже ответил в топике.
я уже тут ответил, что эта реализация — не сложная, просто маловато опыта у людей с шаблонами нового стандарта. А как было сказано тут, статью можно использовать чтоб лучше разобраться с новыми возможностями.
но мы ведь с Вами находимся в ветке C++ — тут все пишется на C++: и простое, и сложное=). Не обделять же C++ программистов функциональными прелестями.

Информация

В рейтинге
Не участвует
Откуда
Украина
Зарегистрирован
Активность