Re[8]: Is C# becoming a functional language?
От: Mamut Швеция http://dmitriid.com
Дата: 02.02.07 08:30
Оценка:
LP>В частности, ФЯ были бы очень к месту в CAD-системах в качестве внутренних языков. На них, быть может, легче решать небольшие, локальные задачи. Но для крупной разработки промышленного уровня применение данного подхода оптимальным назвать нельзя.

Я бы все же ознакомился с вопросом, прежде, чем такое заявлять.

Erlang
Автор: Gaperton
Дата: 17.02.04

Haskell
Lisp (хоть он и не является ФЯ, как таковым)

Ну и так далее. Часто бывает так, что об использовании таких языков открыто не заявляется, потому что использование таких языков является конкурентным преимуществом.

LP>Мое мнение, возможно, незначительно изменится после ознакомления хотя бы с одним из этих языков (до этого у меня не было реального опыта применения).


dmitriid.comGitHubLinkedIn
Re[9]: Is C# becoming a functional language?
От: Denis2005 Россия  
Дата: 02.02.07 09:00
Оценка:
Здравствуйте, Mamut, Вы писали:

M>... Я лучше все в скрипты вынесу


Конечно, если производительность не представляет особого интереса.
Re[7]: Is C# becoming a functional language?
От: VladGalkin Украина  
Дата: 02.02.07 09:22
Оценка: :))
Здравствуйте, VladD2, Вы писали:

VD> [...skipped]




И Остап протянул Ухудшанскому лист, на котором было
написано: ТОРЖЕСТВЕННЫЙ КОМПЛЕКТ НЕЗАМЕНИМОЕ ПОСОБИЕ ДЛЯ СОЧИНЕНИЯ ЮБИЛЕЙНЫХ СТАТЕЙ, ТАБЕЛЬНЫХ ФЕЛЬЕТОНОВ, А ТАКЖЕ ПАРАДНЫХ СТИХОТВОРЕНИЙ. ОД И ТРОПАРЕЙ.


(C)
ДЭ!
Re[7]: Is C# becoming a functional language?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.02.07 09:53
Оценка:
Здравствуйте, cl-user, Вы писали:

CU>стенаний девственницы


Сбавь обороты.
... << RSDN@Home 1.2.0 alpha rev. 669>>
AVK Blog
Re[7]: Оффтоп:
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.02.07 10:03
Оценка: +3
Здравствуйте, VladGalkin, Вы писали:

VG>А Вы не кащенит ли случаем?


Что то мне не очень нравятся подобные шутки, прямо попахивающие оскорблением. Просьба разделять несогласие с утверждениями автора и личность самого автора.
... << RSDN@Home 1.2.0 alpha rev. 669>>
AVK Blog
Re[5]: Is C# becoming a functional language?
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.02.07 10:28
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Хм. А goto почему проблем с CAS не вызывает?
Потому, что он работает только в пределах текущего метода. И стек сохраняется неизменным.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: Is C# becoming a functional language?
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.02.07 10:28
Оценка:
Здравствуйте, Klapaucius, Вы писали:


K>Ну... Как здесь уже говорили в Pascal или в C можно с помощью ссылок на функцию организовать higher-order function,

А можно продемонстрировать мне, как это будет работать на С или Pascal? Элементарную функцию, которая делает из любой двухаргументной функции одноаргументную, связывая второй параметр?
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: Is C# becoming a functional language?
От: Cyberax Марс  
Дата: 02.02.07 10:32
Оценка:
Sinclair wrote:
> K>Ну... Как здесь уже говорили в Pascal или в C можно с помощью ссылок
> на функцию организовать higher-order function,
> А можно продемонстрировать мне, как это будет работать на С или Pascal?
> Элементарную функцию, которая делает из любой двухаргументной функции
> одноаргументную, связывая второй параметр?
Вспомни bind_1st/bind_2nd из STL и представь ее на С. Только вот
выглядеть будет еще более жутко.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[10]: Is C# becoming a functional language?
От: Mamut Швеция http://dmitriid.com
Дата: 02.02.07 11:01
Оценка:
M>>... Я лучше все в скрипты вынесу

D>Конечно, если производительность не представляет особого интереса.


Ну это естественно. А если производительность критична, возьму Эрланг


dmitriid.comGitHubLinkedIn
Re[13]: Is C# becoming a functional language?
От: Last Cjow Rhrr Россия lj://_lcr_
Дата: 02.02.07 11:31
Оценка:
Cyberax,

>> K>Ну... Как здесь уже говорили в Pascal или в C можно с помощью ссылок

>> на функцию организовать higher-order function,
>> А можно продемонстрировать мне, как это будет работать на С или Pascal?
>> Элементарную функцию, которая делает из любой двухаргументной функции
>> одноаргументную, связывая второй параметр?
C>Вспомни bind_1st/bind_2nd из STL и представь ее на С. Только вот
C>выглядеть будет еще более жутко.

Ну-у тогда flip:
Prelude> (/) 2 1
2.0
Prelude> (flip (/)) 2 1
0.5

?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[13]: Is C# becoming a functional language?
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.02.07 11:32
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>Вспомни bind_1st/bind_2nd из STL и представь ее на С.
Не могу. Потому как stl вроде бы использует функторы и шаблоны, а в С ни того ни другого нету.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Is C# becoming a functional language?
От: Cyberax Марс  
Дата: 02.02.07 11:38
Оценка:
Sinclair wrote:
> C>Вспомни bind_1st/bind_2nd из STL и представь ее на С.
> Не могу. Потому как stl вроде бы использует функторы и шаблоны, а в С ни
> того ни другого нету.
Функторы — элементарно:
struct Functor
{
    int (*func)(int a, int b);
};

int add(int a, int b)
{
    return a+b;
}

Functor * new_add_functor()
{
    Functor *f=(Functor*)malloc(sizeof(Functor));
    f->func=&add;
    return f;
}

int reduce(List *lst, Functor *f)
{
    int res=0;
    while(lst!=null)
    {
        res=f->func(lst->data,res);
        lst=lst->next;
    }
    return res;
}

//Суть понятна?


Точно так же делаем bind_1st/bind_2nd. Скорее всего потеряем возможность
generic-программирования, но может с помощью макросов можно будет
сделать что-то подобное.

Я такое где-то даже видел, но сейчас не вспомню где именно.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[17]: Is C# becoming a functional language?
От: Трурль  
Дата: 02.02.07 12:27
Оценка:
Здравствуйте, raskin, Вы писали:

R>А разве там можно её передать так, чтобы она ссылалась на переменные

R>функции на шаг выше?

Вообще, можно.
procedure forall(l:IntList; procedure f(var i:integer));
begin
 while l<>nil do begin f(l.head); l:=l.tail end;
end;

procedure foo;
var
  a : Integer;
  l:IntList;
  procedure AddA (var i:integer);
  begin
   i:=i+a;
  end;
begin
  ...
  forall(l, AddA);
end;

Но заставить винапи поддерживать это,конечно, нельзя.
Re[18]: Is C# becoming a functional language?
От: raskin Россия  
Дата: 02.02.07 13:16
Оценка:
Трурль wrote:
> R>А разве там можно её передать так, чтобы она ссылалась на переменные
> R>функции на шаг выше?
>
> Вообще, можно.
>
> procedure forall(l:IntList; procedure f(var i:integer));
> begin
> while l<>nil do begin f(l.head); l:=l.tail end;
> end;
>
> procedure foo;
> var
> a : Integer;
> l:IntList;
> procedure AddA (var i:integer);
> begin
> i:=i+a;
> end;
> begin
> ...
> forall(l, AddA);
> end;
Это не то, что я хотел, я имел в виду передать как возвращаемое
значение. Это я и сам умею. Передача WinAPI являлась выдачей значения
вовне дерева вызовов с корнем в носителе локальной функции, что именно
принимало функцию — не так важно/
Posted via RSDN NNTP Server 2.1 beta
Re[15]: Is C# becoming a functional language?
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.02.07 14:00
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Sinclair wrote:

>> C>Вспомни bind_1st/bind_2nd из STL и представь ее на С.
>> Не могу. Потому как stl вроде бы использует функторы и шаблоны, а в С ни
>> того ни другого нету.
C>Функторы — элементарно:
C>//Суть понятна?
Неа. Непонятна. Покажи мне какой-нибудь другой функтор, который можно передать в Reduce.

C>Точно так же делаем bind_1st/bind_2nd.

Пока не понимаю, как именно
C>Скорее всего потеряем возможность generic-программирования, но может с помощью макросов можно будет сделать что-то подобное.
Пока что всё, что мы сделали — это усложненную передачу двухаргументной функции.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[16]: Is C# becoming a functional language?
От: Cyberax Марс  
Дата: 02.02.07 14:36
Оценка: 18 (1)
Sinclair wrote:
> C>Функторы — элементарно:
> C>//Суть понятна?
> Неа. Непонятна. Покажи мне какой-нибудь другой функтор, который можно
> передать в Reduce.
struct EnhancedFunctor
{
    struct Functor base; //Трюк с наследованием
    int threshold;
};

int sumNumbersGreaterThan(Functor *self, int a, int b)
{
    EnhancedFunctor *enh=(EnhancedFunctor*)self; //!!
    if (a>enh->threshold) return b;
    return b+a;
}

//Наш конструктор
Functor * new_filtering_functor(int threshold)
{
    EnhancedFunctor *f=(EnhancedFunctor*)malloc(sizeof(Functor));
    f->base.func=&sumNumbersGreaterThan;
    f->threshold=threshold;
    return f;
}

//Немного модифицируем reduce:
int reduce(List *lst, Functor *f)
{
     int res=0;
     while(lst!=null)
     {
         res=f->func(f, lst->data,res); //Добавим указатель 'this'
         lst=lst->next;
     }
     return res;
}

...
Functor *filter=new_filtering_functor(11);
int res=reduce(some_list, filter);

Такой трюк с наследованием структур гарантировано будет работать по
Стандарту С. Собственно, он очень широко используется в GTK. Там,
кстати, я такие трюки и видел.

Показать еще пару аналогичных функуторов?

Если еще добавить базовый класс с тремя двумя указателями на функции
(QueryInterface, Release, Add), то можно построить аналог COMа.

> C>Точно так же делаем bind_1st/bind_2nd.

> Пока не понимаю, как именно
Если честно, мне не хочется вспоминать синтаксис указателей на функции
из C, а то бы написал
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[13]: Is C# becoming a functional language?
От: ironwit Украина  
Дата: 02.02.07 15:01
Оценка:
Здравствуйте, gandalfgrey, Вы писали:


G>Как быть, куда бежать ? Никакого внятного, корректного и более-менее универсального способа обработать такую ситуацию пока не придумано.

G>Так что — такова се ля ва ! 8)
в 1 ситуации в данных дырка
во второй ситуации данные больше чем средние два раза, так как считаются два раза.
в итоге в среднем за год выходим на ноль погрешность.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Я не умею быть злым, и не хочу быть добрым.
Re[6]: Is C# becoming a functional language?
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.02.07 15:01
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Потому, что он работает только в пределах текущего метода. И стек сохраняется неизменным.


А чем тогда отличается концевая рекурсия? Она же тоже работает исключительно в рамках одного метода? Не, можно конечно попробовать реализовать межметодную концевую рекурсию без инлайнинга, но это же отдельная задача. Ведь даже не решая ее сделать тупой переход в начало метода с изменением параметров вместо вызова — не проблема.

В Моно эта инструкция работает отлично.

Сдается мне все же, что это не более чем отговорка тех кто криво реализовал данную возможность.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Is C# becoming a functional language?
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.02.07 15:01
Оценка:
Здравствуйте, IT, Вы писали:

IT>Всё же интерфейсы придуманы скорее не для дураков, а для поддержки КОП.


Такое ощущание что фичи ФП придуманы для дурагой. Вообще — Сэр — странно видить у вас плохое чувство юмора.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Is C# becoming a functional language?
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.02.07 15:01
Оценка: +1
Здравствуйте, Mamut, Вы писали:

M>Lisp (хоть он и не является ФЯ, как таковым)


Сколько раз я уже слышал это глубочайшее заблуждение. Откуда вы берете это ерись?

Лисп прородитель всех ФЯ. В нем концепции ФЯ были сормированы и опробированы. Все ФЯ клоны лиспа в некотором смысле.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.