![]() |
Модераторы: Се ля ви |
![]() ![]() ![]() |
|
maxim1000 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
пришла в голову мысль: анонимные функции в C++ вполне можно организовать через for
примеры мы пишем постоянно: когда перебираем элементы контейнера с помощью итератора и т.д. но можно пойти и дальше: делаем объект алгоритм, который соответствует последовательности действий, в которой нужно вызывать пользовательскую функцию у него должно быть три части: 1. инициализация 2. критерий окончания 3. шаг до следующего вычисления внешней функции в качестве параметров и возвращаемых значений можно использовать поля/методы этого объекта например, попробуем сделать сортировку (по-моему, называется сортировка выбором):
тогда сортировка по возрастанию младшей цифры будет выглядеть так:
преимущества - "полное погружение" в текущий контекст - можно использовать всё, что сейчас доступно, и не надо передавать это в качестве параметров в класс (например, основание системы счисления могло бы задаваться параметром функции, в которой происходит сортировка) недостатки - нужно представлять алгоритм в автоматном виде, что не всегда удобно
выбросил его, поставил 2005 ![]() -------------------- qqq |
||||||
|
|||||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: нет Всего: 92 |
А почему бы (для плюсов) просто не посмотреть в сторону boost::bind и boost::lambda? Вещи очень развитые. C++ никогда не будет функциональным языком как таковым, но ФП с помощью библиотек давно реализовано.
|
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: нет Всего: 3 |
Void, посмотри пожалуйста вот это новшество http://8vmr.livejournal.com/6114.html в Delphi2009 появилась такая возможность, как лямбда-функции, в связи с чем хотелось поинтересоваться возможно ли теперь решить постовленную задачу:
возможно ли теперь упростить работу -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 9 Всего: 173 |
Delphist, да, похоже в этом вопросе Delphi теперь практически повторяет C# 2.0.
Обалдеть, люди ссылаются на мой пост двухлетней давности. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: нет Всего: 3 |
Это не важно. Кодом не мог бы показать решение задачи -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
minyor |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 22.10.2009 Репутация: нет Всего: нет |
Я тут про С++ нашел тему:
http://blogs.msdn.com/vorobiev/archive/200...30/9853791.aspx Сам правда еще попробовать не успел, но выглядит вроде прикольно ![]() |
|||
|
||||
k0rvin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
более интересным применением функций как объектов первого класса является создание таблиц функций, объединённых по какому-либо качеству (или нескольким качествам) и построение собственной системы диспетчеризации по этим качествам, что весьма полезно при реализации DSL/eDSL. например обобщенные методы можно реализовать таким образом: функция-метод обращается к хеш-таблице генериков для взятия своего генерика, из которого затем берётся функция-специализация, типа того:
или пример компилирования бинарных деревьев в "On Lisp", но для этого нужны еще и замыкания =) -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
не знаком с С#, поэтому мне больше напомнило С++, хотя лямбды и замыкания выглядят не так костыльно как в плюсах, но думается мне, что внутри это всё реализовано не очень-то красиво и паскаль/делфи рискует разделить судьбу С++ -- превратиться в монстра. думаю следующим шагом в развити паскаля/делфи должна быть замена системы типов, ибо существующая ну уж очень устарела -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
![]() ![]() ![]() |
Правила раздела "Философия программирования": | |
|
Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО: • вопросы перспективного развития методов написания ПО; • изменяющиеся языки и методологии программирования; Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Философия программирования | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |