Какой язык позволяет расширять область действия подпрограмм автоматом?
![](/images/graemlins/laugh.gif)
ответ - любой язык.
по степени удобства (в убывающем порядке):
ФЯ
C# 2.0
C++
C/Паскаль
Как это достигается в:
C# 2.0
C++
C/Паскаль
, например?
Конкретно сейчас я пишу прогу на фортране - мб ты знаешь и как здесь этого достичь?
А то многие библиотечные подпрограммы так как раз умеют, только вот исходников с IVF не поставляется
![](/images/graemlins/frown.gif)
Но подозреваю, что это делается отнють не автоматом
![](/images/graemlins/frown.gif)
void Output(int i)
{
Console.WriteLine("xx{0}xx", i);
}
delegate void Executter<T>(T item);
void ForEach<T>(IEnumerable<T> items, Executtor<T> executtor)
{
foreach (T item in items)
executtor(item);
}
void Main
{
ForEach(new int[]{1, 5, 3}, new Executter<int>(Output;
}
C++: аналогично с# 2.0
C
void Output(int i)
{
printf("%l", i);
}
typedef void Executtor_Int(int item);
//всего Foreach_ей надо по кол-ву встроенных типов + один для void*
void Foreach_Int(int * items, int size, Executtor_Int executtor)
{
for (int i = 0; i < size; ++i)
executtor(items[i]);
}
void main
{
int items[] = {1, 3, 5};
ForEach_Int(items, 3, Output);
}
![](/images/graemlins/smile.gif)
странно, почему ты тогда их на одну строчку не поставил?
![](/images/graemlins/smirk.gif)
python:
B=[f(x) for x in A]
или
B=(f(x) for x in A)
в зависимости от нужд. Ну в данном случае питон можно отнести к ФЯ.
![](/images/graemlins/smile.gif)
потому что в C# 2.0, есть делегаты и анонимные делегаты, а в C++ - приходится всегда вводить фиктивные функции или классы
По идее boost::lambda должно быть достаточно.
Оставить комментарий
durka82
Какой язык позволяет, описав действие над элементом, использовать его над любой коллекцией таких элементов (хотя бы над массивом произвольной размерности)?Шаблоны С такое позволяют?