Страница 2 из 4
Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 27.04.2012 23:28
vovan
Гость писал(а):ок похоже на функциональные языки
но в принципе указатель на функцию и в Сях и в Паскале кажется можно было передавать. Просто этим мало кто пользовался.
А вообще похоже на натяжку старой концепции программирования (ООП) к новым реалиям (ФП). Так же, как и когда-то в C++, в императивный язык ввели элементы ООП... все эти полурешения не ахти как хороши.
Но видать тенденция в сторону ФП есть.
Тенденция ещё какая! Посмотри в сторону С++11. Например в VS2010 уже ввели labda. Можно посмотреть
здесь.
Только похоже что в ОСД в основном дремучие компиляторы используют. Также на этом форуме практически нет прогеров.
Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 28.04.2012 00:48
minimax
просто (наконец-то) пришло время, когда код надо писать быстро

Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 28.04.2012 02:05
Гость
vovan писал(а): Также на этом форуме практически нет прогеров.
10 лет назад, на предыдущей версии форума, их было подавляющее большинство

Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 28.04.2012 02:34
minimax
Гость писал(а):vovan писал(а): Также на этом форуме практически нет прогеров.
10 лет назад, на предыдущей версии форума, их было подавляющее большинство

да и сейчас их много, активность правда упала
Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 30.04.2012 07:38
Andruha
Ну в C# все это есть уже года эдак с 2007. Ламбда и делегаты
Код: Выделить всё
string[] names = { "Hartono, Tommy", "Adams, Terry",
"Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
string firstLongName = names.FirstOrDefault(name => name.Length > 20);
где name => name.Length > 20 и есть передаваемый код
Или
Код: Выделить всё
int[] numbers = { 0, 30, 20, 15, 90, 85, 40, 75 };
foreach (int number in numbers.Where((number, index) => number <= index * 10))
{
Console.WriteLine(number);
}
(number, index) => number <= index * 10) передаваемый код
Передаваемый код это или анонимная функция как в примерах (ламбда синтаксис) или реальная фи-я.
типа:
Код: Выделить всё
int[] numbers = { 0, 30, 20, 15, 90, 85, 40, 75 };
foreach (int number in numbers.Where(MySearch)
{
Console.WriteLine(number);
}
bool MySearch(int number, int index)
{
return number <= index * 10;
}
Все эти конструкции имеет свои недостатки, а именно - освоение такого языка требует времени
Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 30.04.2012 10:15
vovan
Andruha писал(а):Ну в C# все это есть уже года эдак с 2007. Ламбда и делегаты
...
Все эти конструкции имеет свои недостатки, а именно - освоение такого языка требует времени
Проблема в том что этот код не совсем просто читать и иногда отлаживать.
Вот например поставь брейкпоинт здесь:
Код: Выделить всё
string firstLongName = names.FirstOrDefault(name => name.Length > 20);
для этого придётся добавлять скобки.
И вообще одно и золотых правил "одна строчка одно действие" неспроста придумали.
Можно весь код запихнуть в одну строчку, только соправождать его будет тяжело.
А для себя использую простое правило. Если ФП упрошает код или улучшает производительность то использую его. Иначе нехер выёбываится

Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 02.05.2012 21:14
Гость
Освойте уже linq.
Мне понравилось функциональное программирование еще в питоне, но в скале глючноваты IDE и сама сложновата. А вот linq вроде бы то, что надо, правда, какого-то хуя замаскированное под SQL. Вообще все думаю перейти в явы на сисярп.
Насчет отладки - хз как оно там, а если еще и параллельно исполнятеся?
Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 03.05.2012 09:21
vovan
Гость писал(а):
Насчет отладки - хз как оно там, а если еще и параллельно исполнятеся?
Не отлажен -> не протестирован -> жук.
Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 03.05.2012 10:51
Гость
С отладкой в ФП трудно. Точнее, с дебаггингом в привычном смысле. А отдельно функцию отлаживать и тестировать всегда можно, непривычно правда, требует некоторого навыка.
Re: Предикатная логика, функциональное программирование, Ска
Добавлено: 03.05.2012 11:50
Simple
Ваще-то должно быть наоборот. Функция ж всегда возвращает одно и то же значение.