Expression Tree для описания алгоритмов
От: barn_czn  
Дата: 13.05.10 02:16
Оценка:
Есть такая проблема, что описания различных алгоритмов приводятся в самой разной форме: псевдокод, С++, набор формул и слов.
Наиболее продвинутые математические библиотеки в основном написаны на С++. Понять суть алгоритма из сорцов — довольно непросто.
Отсюда возникает вопрос — почему до сих пор нет нормального языка, или Expression Tree с врьируемым синтаксисом, который бы позволил описывать алгоритмы в терминах математики, а не типов данных конкретных языков, платформ?
Или я ошибаюсь?
Как бы было здорово иметь библиотеку с описанием алгоритмов в терминах одного Expression Tree, выражения которого легко бы было транслировать в другие языки, специфицировать под конкретные типы данных, отображать в удобочитаемой раскрашеной цветами радуги форме.

Есть у кого предложения на данную тему?
Интересует главным образом Expression Tree, синтаксис не имеет значения.
Re: Expression Tree для описания алгоритмов
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 13.05.10 07:01
Оценка: +2
_>Отсюда возникает вопрос — почему до сих пор нет нормального языка, или Expression Tree с врьируемым синтаксисом, который бы позволил описывать алгоритмы в терминах математики, а не типов данных конкретных языков, платформ?

возможности конечных языков различны (языковые, скоростные и т.д.), поэтому их трудно привести к какому-то общему знаменателю в виде единого expression tree
Re: Expression Tree для описания алгоритмов
От: Anton V. Kolotaev  
Дата: 13.05.10 09:32
Оценка:
Здравствуйте, barn_czn, Вы писали:

_>Есть такая проблема, что описания различных алгоритмов приводятся в самой разной форме: псевдокод, С++, набор формул и слов.

_>Наиболее продвинутые математические библиотеки в основном написаны на С++. Понять суть алгоритма из сорцов — довольно непросто.
_>Отсюда возникает вопрос — почему до сих пор нет нормального языка, или Expression Tree с врьируемым синтаксисом, который бы позволил описывать алгоритмы в терминах математики, а не типов данных конкретных языков, платформ?
_>Или я ошибаюсь?
_>Как бы было здорово иметь библиотеку с описанием алгоритмов в терминах одного Expression Tree, выражения которого легко бы было транслировать в другие языки, специфицировать под конкретные типы данных, отображать в удобочитаемой раскрашеной цветами радуги форме.

_>Есть у кого предложения на данную тему?

_>Интересует главным образом Expression Tree, синтаксис не имеет значения.

Представить некоторый вычислительный алгоритм в некоторой области в абстрактном виде — не самая сложная задача. Сложность (не невозможность, а именно сложность) — в эффективной трансляции в код подлежащей платформы. Чтобы посмотреть на объем работы, я думаю будет достаточно взглянуть на исходники blitz++.

p.s. В принципе, я думаю, что для ограниченных областей таких систем при желании можно найти достаточно много.
Re: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.05.10 17:57
Оценка: 3 (2) -2
Здравствуйте, barn_czn, Вы писали:

_>Как бы было здорово иметь библиотеку с описанием алгоритмов в терминах одного Expression Tree, выражения которого легко бы было транслировать в другие языки, специфицировать под конкретные типы данных, отображать в удобочитаемой раскрашеной цветами радуги форме.


_>Есть у кого предложения на данную тему?


Ага. Это примерно тоже самое, что писать тексты на неком Эспиранто и автоматически переводить их на все языки мира. При этом чтобы качество перевода не уступало качеству ручного проффесионального перевода с последующим редактированием.

Короче — утопия.

Простой пример. Есть языки с автоматическим управлением памятью, а есть с ручной. Описав алгоритм с учетом ручного урпавления будет сложно преобразовать его для языков с автоматическим управлением памятью, обратное вообще невозможно. Потом одни языки поддерживают функции как первоклассные значения, а другие нет. Если не использовать этой возможности, то описание будет сложнее, и стало быть сам алгоритм будет менее понятен. Если использовать, то языки не поддерживающие оные возможности будут в пролете. Тоже самое с сопоставлением с образцом и другими фичами. Короче, чем мощнее язык и чем больше парадигм и фич он поддерживает, тем он выразительнее, но программа использующая эти выразительные особенности уже не сможет быть преобразована в языки где их нет. Или будет выглядеть на них ужасно.

Что касается математики, то она вообще не пригодна для описания именно алгоритмов. Математика позволяет выразить формулы, а они статичны. Если нужно именно математическое описние, то для этого есть разые программы вроде Математики. Используй их.

_>Интересует главным образом Expression Tree, синтаксис не имеет значения.


На самом деле любой фунциональный язык отлично подходит для описания алгоритмов. Если речь о базовых, то вообще любой, пожалуй.

Так что вопрос скорее в качестве написания алгоритмов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Expression Tree для описания алгоритмов
От: barn_czn  
Дата: 14.05.10 01:51
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, barn_czn, Вы писали:


_>>Как бы было здорово иметь библиотеку с описанием алгоритмов в терминах одного Expression Tree, выражения которого легко бы было транслировать в другие языки, специфицировать под конкретные типы данных, отображать в удобочитаемой раскрашеной цветами радуги форме.


_>>Есть у кого предложения на данную тему?


VD>Ага. Это примерно тоже самое, что писать тексты на неком Эспиранто и автоматически переводить их на все языки мира. При этом чтобы качество перевода не уступало качеству ручного проффесионального перевода с последующим редактированием.


Естественные языки и языки программирования — большая разница все таки. Выражения ЯП как правило имеют только одно вполне конкретное смысловое значение.
Перевод с одного ЯП на другой делается уже давно и повсюду.
Примеры: LINQ, CLR языки -> код, Fortran->C++.

Есть конечно проблемы, но не это главное. Главное то что такой язык должен описывать семантику алгоритмов,
исползуя при этом базовые типы: число, множество, логические операции.
Вы же читаете алгоритмы на псевдокоде, где нет строгого задания числовых типов данных. Так вот я ищу формализованый псевдокод.
А перевод в другие языки — это вторично, на первом этапе этот перевод может делать разработчик.

VD>Простой пример. Есть языки с автоматическим управлением памятью, а есть с ручной. Описав алгоритм с учетом ручного урпавления будет сложно преобразовать его для языков с автоматическим управлением памятью, обратное вообще невозможно. Потом одни языки поддерживают функции как первоклассные значения, а другие нет. Если не использовать этой возможности, то описание будет сложнее, и стало быть сам алгоритм будет менее понятен. Если использовать, то языки не поддерживающие оные возможности будут в пролете. Тоже самое с сопоставлением с образцом и другими фичами. Короче, чем мощнее язык и чем больше парадигм и фич он поддерживает, тем он выразительнее, но программа использующая эти выразительные особенности уже не сможет быть преобразована в языки где их нет. Или будет выглядеть на них ужасно.


VD>Что касается математики, то она вообще не пригодна для описания именно алгоритмов. Математика позволяет выразить формулы, а они статичны.


У вас узкое представление о матетматике. Математика — это не только формулы расчета числовых значений.
Re[2]: Expression Tree для описания алгоритмов
От: Aleх  
Дата: 14.05.10 05:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Простой пример. Есть языки с автоматическим управлением памятью, а есть с ручной. Описав алгоритм с учетом ручного урпавления будет сложно преобразовать его для языков с автоматическим управлением памятью, обратное вообще невозможно.

Наоборот, алгоритм, описанный с учетом автоматического управления памятью легко переводится на язык с ручным управлением памяти (например Haskell -> C). А обратное скорее всего невозможно.
Re[3]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 14.05.10 22:23
Оценка: -1
A>Наоборот, алгоритм, описанный с учетом автоматического управления памятью легко переводится на язык с ручным управлением памяти (например Haskell -> C).

Не могли бы вы прояснить сие утверждение, желательно с примером.

A>А обратное скорее всего невозможно.


Чего, из ручного не перевести в автоматическое? Лол. Да, как бы, просто free() поубирать, ну, в крайнем случае, заменить на присваивание null.
Re: Expression Tree для описания алгоритмов
От: FR  
Дата: 15.05.10 04:18
Оценка: +1
Здравствуйте, barn_czn, Вы писали:

_>Есть такая проблема, что описания различных алгоритмов приводятся в самой разной форме: псевдокод, С++, набор формул и слов.

_>Наиболее продвинутые математические библиотеки в основном написаны на С++. Понять суть алгоритма из сорцов — довольно непросто.
_>Отсюда возникает вопрос — почему до сих пор нет нормального языка, или Expression Tree с врьируемым синтаксисом, который бы позволил описывать алгоритмы в терминах математики, а не типов данных конкретных языков, платформ?

Есть большое подозрение что математика не является самым лучшим и выразительным языком для описания алгоритмов.
Но есть языки которые вполне приближаются к тому что ты хочешь, например как уже говорил Влад любой современный
функциональный язык вполне подходит, среди них есть даже специально для этого предназначенные — http://coq.inria.fr/

Другой вариант это динамические языки (питон, руби) для прототипирования они очень хороши. Я например часто сложные алгоритмы
которые нужно реализовать на C++ сначала делаю на питоне (сейчас больше на окамле) это дает существенный выигрыш во времени
разработки.
Re[4]: Expression Tree для описания алгоритмов
От: barn_czn  
Дата: 15.05.10 05:26
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

A>>Наоборот, алгоритм, описанный с учетом автоматического управления памятью легко переводится на язык с ручным управлением памяти (например Haskell -> C).


ТЗИ>Не могли бы вы прояснить сие утверждение, желательно с примером.



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

Хотите примеры? Пожалуйста — .net, выражения написанные на любом языке CLR в конечном итоге транслируются в машинный код, где уже работает менеджер памяти сам по себе. Перевести unmanadged С++ в .net автоматически — невозможно.


ТЗИ>Чего, из ручного не перевести в автоматическое? Лол. Да, как бы, просто free() поубирать, ну, в крайнем случае, заменить на присваивание null.


В том то и дело что надо не free() заменить на =null, а вообще убрать free(), и пусть транслятор сам думает где надо вызывать этот free().Чтоб это стало возможным нужна семантика языка позволяющая делать это безошибочно.
Re[2]: Expression Tree для описания алгоритмов
От: barn_czn  
Дата: 15.05.10 06:04
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, barn_czn, Вы писали:


_>>Есть такая проблема, что описания различных алгоритмов приводятся в самой разной форме: псевдокод, С++, набор формул и слов.

_>>Наиболее продвинутые математические библиотеки в основном написаны на С++. Понять суть алгоритма из сорцов — довольно непросто.
_>>Отсюда возникает вопрос — почему до сих пор нет нормального языка, или Expression Tree с врьируемым синтаксисом, который бы позволил описывать алгоритмы в терминах математики, а не типов данных конкретных языков, платформ?

FR>Есть большое подозрение что математика не является самым лучшим и выразительным языком для описания алгоритмов.


У меня как раз обратное подозрение. Какое из двух описаний алгоритма сортировки вы выберите?
1) описание в псевдокоде, где входные данные — множество чисел,
2) описание на каком либо промышленном яп, где входные данные — даже трудно выбрать, то ли массив чисел (какого типа опять же числа),
то ли контейнер.

При втором варианте вы к тому же сужаете круг читателей такого алгоритма, не все мы здесь пишем на с++ или питоне.

Потом, математика понятие обширное, я не призываю использовать только лишь базовые понятия (кванторы существования, любого элемента). Например операторы
while, if, foreach — считаю вполне математичными, потому что они имеют одно конкретное толкование, и выразимы через базовые операции логики и теории множеств.


FR>Но есть языки которые вполне приближаются к тому что ты хочешь, например как уже говорил Влад любой современный

FR>функциональный язык вполне подходит, среди них есть даже специально для этого предназначенные — http://coq.inria.fr/

Спасиб за ссылку, интересная затея.

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


И вот что я заметил, описание каждого яп — это всегда описание его синтаксиса. Я не ищу новый супер удобный синтаксис, мне даже вполне подходит xml подобный яп, лижбы было понятно какое дерево выражений несет этот яп.

На текущий момент наиболее близким к цели считаю MathML, но еще пока мало ознакомился с ним, и есть подозрение что он годится лишь для представления, хотя вроде как пишут что есть и Content разметка несущая семантику выражений.
Re[3]: Expression Tree для описания алгоритмов
От: FR  
Дата: 15.05.10 07:02
Оценка: +1 :)
Здравствуйте, barn_czn, Вы писали:


_>У меня как раз обратное подозрение. Какое из двух описаний алгоритма сортировки вы выберите?

_>1) описание в псевдокоде, где входные данные — множество чисел,
_>2) описание на каком либо промышленном яп, где входные данные — даже трудно выбрать, то ли массив чисел (какого типа опять же числа),
_> то ли контейнер.

Во многих языках есть некие базовые вещи которые и можно использовать. В функциональных это обобщенные списки.

Вот это на хаскеле

qsort []     = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)


или это на прологе

quicksort([X|Xs],Ys) :-
  partition(Xs,X,Left,Right),
  quicksort(Left,Ls),
  quicksort(Right,Rs),
  append(Ls,[X|Rs],Ys).
quicksort([],[]).


Ни чем ни хуже чем псевдокод по понятности, но при этом являются вполне рабочими программами.

_>При втором варианте вы к тому же сужаете круг читателей такого алгоритма, не все мы здесь пишем на с++ или питоне.


Так псевдокод это тоже некий язык и его тоже придется изучать, и он также сужает круг читателей.

_>Потом, математика понятие обширное, я не призываю использовать только лишь базовые понятия (кванторы существования, любого элемента). Например операторы

_>while, if, foreach — считаю вполне математичными, потому что они имеют одно конкретное толкование, и выразимы через базовые операции логики и теории множеств.

Тогда Хаскель тоже раздел математики

_>Почему на роль языка описания алгоритмов я не могу принять функц. яп.

_>Во-первых сложный синтаксис, который далеко не всем нравится и который еще надо изучать.

У большинства ФП синтаксис проще сиобразных.

_>Во-вторых опять же , функц. языков много, у всех у них свои плюсы и минусы, и предпочтения у всех разные.


Можно выбрать один, например лучше всего по моему для прототипирования для обычных не ленивых языков Standart ML.
Да и изучив тот же ML (отдельно схема и другие лиспообразные) и зная до этого си уже вполне можешь легко начать читать практически на
всех живых сегодня функциональных языках.

_>В третьих, не для этого они изначально спроектированы, в примере с сортировкой те же проблемы бы были — какие типы данных выбирать при описании достаточно широкого класса алгоритмов?


Список как базовый, сам алгоритм обобщеный, практически нет выбора

_>И вот что я заметил, описание каждого яп — это всегда описание его синтаксиса. Я не ищу новый супер удобный синтаксис, мне даже вполне подходит xml подобный яп, лижбы было понятно какое дерево выражений несет этот яп.


Ты очень сильно ошибаешся, синтакис вообще не важен.
Возьмем например OCaml и Хаскель, очень похожие синтаксисы и абсолютно разные языки. Теперь берем тот же OCaml и Немерле (без метапрограммирования и ООП) синтаксисы абсолютно разные, семантически языки практически совпадают.

_>На текущий момент наиболее близким к цели считаю MathML, но еще пока мало ознакомился с ним, и есть подозрение что он годится лишь для представления, хотя вроде как пишут что есть и Content разметка несущая семантику выражений.


Это же нечеловекочитаемо абсолютно.
Re[3]: Expression Tree для описания алгоритмов
От: Курилка Россия http://kirya.narod.ru/
Дата: 15.05.10 07:25
Оценка:
Здравствуйте, barn_czn, Вы писали:

_>Здравствуйте, FR, Вы писали:


FR>>Но есть языки которые вполне приближаются к тому что ты хочешь, например как уже говорил Влад любой современный

FR>>функциональный язык вполне подходит, среди них есть даже специально для этого предназначенные — http://coq.inria.fr/

_>Спасиб за ссылку, интересная затея.


Ну это далеко не затея, а довольно заметная область Computer Science. Кок наиболее известный доказыватель, есть и другие. У Б. Пирса есть курс и книга по Coq, если интересно.
Re[4]: Expression Tree для описания алгоритмов
От: barn_czn  
Дата: 15.05.10 08:21
Оценка: -3 :)
_>>Почему на роль языка описания алгоритмов я не могу принять функц. яп.
_>>Во-первых сложный синтаксис, который далеко не всем нравится и который еще надо изучать.

FR>У большинства ФП синтаксис проще сиобразных.


Ну это для вас проще. То что вы написали на хаскеле и прологе для меня филькина грамота, и желания вникнуть особого нет в этот читабельный по вашему мнению синтаксис. Это не в укор этим языкам, просто так исторически сложилось, что большинству людей все таки ближе си-подобные языке. И причина понятна — они более похожи на инглиш.

А так как мы говорим о языке _описания_ алгоритмов, то логично требовать от этого языка такую же легкость восприятия как си-подобные языки или псевдокод.

_>>На текущий момент наиболее близким к цели считаю MathML, но еще пока мало ознакомился с ним, и есть подозрение что он годится лишь для представления, хотя вроде как пишут что есть и Content разметка несущая семантику выражений.


FR>Это же нечеловекочитаемо абсолютно.


Я искал дерево выражений а не читабельный синтаксис. XML подобные языки в этом плане и удобны что дерево выражений явно описывается.
Re[5]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.05.10 08:33
Оценка: +4
Здравствуйте, barn_czn, Вы писали:

_>>>Почему на роль языка описания алгоритмов я не могу принять функц. яп.

_>>>Во-первых сложный синтаксис, который далеко не всем нравится и который еще надо изучать.

FR>>У большинства ФП синтаксис проще сиобразных.


_>Ну это для вас проще. То что вы написали на хаскеле и прологе для меня филькина грамота, и желания вникнуть особого нет в этот читабельный по вашему мнению синтаксис.

Выделенное — это твои трудности. По факту алгоритм на хаскеле или другом ФЯ оказывается гораздо читаемее.

_>Это не в укор этим языкам, просто так исторически сложилось, что большинству людей все таки ближе си-подобные языке.

И что? Давайте теперь всю математику на С перепишем

_>И причина понятна — они более похожи на инглиш.

Я плакал...

int sum = 0;
for(int i=0; i<N; i++)
{
   sum += list[i];
}


больше похоже на английский чем

fold (+) list


???

Еще раз, проблема в твоем незнании языков и все.


Есть другая сторона медали: в чистом ФЯ алгоритм может быть сильно не похож на аналог на императивном языке, и чтобы придумать один общий синтаксис нужно уметь из него оба варианта получать, иначе программа на самом языке окажется понятнее.
Re[6]: Expression Tree для описания алгоритмов
От: barn_czn  
Дата: 15.05.10 15:53
Оценка:
G>Здравствуйте, barn_czn, Вы писали:

_>>>>Почему на роль языка описания алгоритмов я не могу принять функц. яп.

_>>>>Во-первых сложный синтаксис, который далеко не всем нравится и который еще надо изучать.

FR>>>У большинства ФП синтаксис проще сиобразных.


_>>Ну это для вас проще. То что вы написали на хаскеле и прологе для меня филькина грамота, и желания вникнуть особого нет в этот читабельный по вашему мнению синтаксис.

G>Выделенное — это твои трудности. По факту алгоритм на хаскеле или другом ФЯ оказывается гораздо читаемее.

Да, это мои трудности, и еще трудности нескольких миллионов, и их к сожалению большинство.

_>>Это не в укор этим языкам, просто так исторически сложилось, что большинству людей все таки ближе си-подобные языке.

G>И что? Давайте теперь всю математику на С перепишем

Если вы не заметили это уже давно делается.

_>>И причина понятна — они более похожи на инглиш.

G>Я плакал...

G>
G>int sum = 0;
G>for(int i=0; i<N; i++)
G>{
G>   sum += list[i];
G>}
G>


G>больше похоже на английский чем


G>
G>fold (+) list
G>


G>???



Sum(list) тоже не плохо, и что? Краткость != читабельность..

G>Еще раз, проблема в твоем незнании языков и все.


Ок, я действительно не изучал до сих пор ни одного ФЯ, немного правда читал про F#. Но, может я здесь ошибаюсь, тот же C# сейчас позволяет писать код в функциональном стиле: есть анонимные делегаты, лямбды. Я сейчас, возможно наивно, полагаю что ФЯ дает просто краткий синтаксис использования всего этого. Никаких принципиально новых выражений в ФЯ нет. Ведь F# — функциональный язык, а так как он для .net то любой код написаный на нем легко дизассемблировать на C#. Что мне даст изучение какого либо ФЯ?


G>Есть другая сторона медали: в чистом ФЯ алгоритм может быть сильно не похож на аналог на императивном языке, и чтобы придумать один общий синтаксис нужно уметь из него оба варианта получать, иначе программа на самом языке окажется понятнее.


Не могу с вами спорить на тему ФЯ, мало компетентен, но сомнения вы у меня посеяли )), надо думать.
Re[7]: Expression Tree для описания алгоритмов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.05.10 17:52
Оценка: +1
Здравствуйте, barn_czn, Вы писали:

_>Ок, я действительно не изучал до сих пор ни одного ФЯ, немного правда читал про F#. Но, может я здесь ошибаюсь, тот же C# сейчас позволяет писать код в функциональном стиле: есть анонимные делегаты, лямбды.

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

_>Я сейчас, возможно наивно, полагаю что ФЯ дает просто краткий синтаксис использования всего этого. Никаких принципиально новых выражений в ФЯ нет. Ведь F# — функциональный язык, а так как он для .net то любой код написаный на нем легко дизассемблировать на C#. Что мне даст изучение какого либо ФЯ?


Haskell тоже транслируется в C. Что же он дает по сравнению с C?

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

информация к размышлению
Re[5]: Expression Tree для описания алгоритмов
От: FR  
Дата: 16.05.10 03:41
Оценка: 1 (1) +1 :)
Здравствуйте, barn_czn, Вы писали:

_>Ну это для вас проще. То что вы написали на хаскеле и прологе для меня филькина грамота, и желания вникнуть особого нет в этот читабельный по вашему мнению синтаксис. Это не в укор этим языкам, просто так исторически сложилось, что большинству людей все таки ближе си-подобные языке. И причина понятна — они более похожи на инглиш.


Большинству людей как раз будет ближе функциональщина, так как они не программисты, а функциональщина ближе к математической нотации чем
сиобразные. Язык который специально делали очень похожим на инглиш (кобол) не прижился почему-то.

_>А так как мы говорим о языке _описания_ алгоритмов, то логично требовать от этого языка такую же легкость восприятия как си-подобные языки или псевдокод.


А зачем вообще нужен такой язык?

FR>>Это же нечеловекочитаемо абсолютно.


_>Я искал дерево выражений а не читабельный синтаксис. XML подобные языки в этом плане и удобны что дерево выражений явно описывается.


Есть более человекочитаемые и явно выражающие дерево синтаксисы например S-выражения, то есть лисп.
Re[7]: Expression Tree для описания алгоритмов
От: FR  
Дата: 16.05.10 03:48
Оценка:
Здравствуйте, barn_czn, Вы писали:


_>Да, это мои трудности, и еще трудности нескольких миллионов, и их к сожалению большинство.


В году так 90-каком-то большинство не знало и знать не хотело ООП.


G>>И что? Давайте теперь всю математику на С перепишем


_>Если вы не заметили это уже давно делается.


Я не заметил.

G>>
G>>fold (+) list
G>>


G>>???



_>Sum(list) тоже не плохо, и что? Краткость != читабельность..


Sum(list) не содержит в отличии от кода на Хаскеле выше алгоритма.

_>Ок, я действительно не изучал до сих пор ни одного ФЯ, немного правда читал про F#. Но, может я здесь ошибаюсь, тот же C# сейчас позволяет писать код в функциональном стиле: есть анонимные делегаты, лямбды. Я сейчас, возможно наивно, полагаю что ФЯ дает просто краткий синтаксис использования всего этого. Никаких принципиально новых выражений в ФЯ нет. Ведь F# — функциональный язык, а так как он для .net то любой код написаный на нем легко дизассемблировать на C#. Что мне даст изучение какого либо ФЯ?


Этот "краткий синтаксис использования" дает новое качество. А писать на C# функционально очень похоже на писание на Си объектно-ориентированно.


_>Не могу с вами спорить на тему ФЯ, мало компетентен, но сомнения вы у меня посеяли )), надо думать.


Думать, конечно надо, но малополезно, лучше изучить любой понравившийся функциональный язык, теоретически ничего ни поймешь.
Re: Expression Tree для описания алгоритмов
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 16.05.10 07:20
Оценка: 13 (2) +1
Здравствуйте, barn_czn.

Вообще, очень похожие на Ваши идеи высказывает Степанов (автор STL):
http://video.yandex.ru/users/ya-events/view/129/
http://video.yandex.ru/users/ya-events/view/128/
Он мечтает о создании большой библиотеки готовых алгоритмов в их максимально общей, но эффективной форме. Весьма рекомендую посмотреть видео, там много интересного.
С++ — не самый лучший язык для этого, его пытались сделать ближе к цели с введением концептов, но попытка не удалась, т.к. не нашли достаточно хорошей реализации. Но даже в текущей форме там алгоритмы выражаются в более общем виде, чем для "множества чисел" или "конкретных типов платформы". Например, сортировать ведь можно не только числа, а вообще все, что можно сравнивать.
Кстати, в Хаскелле это неплохо выражается — тип функции сортировки
Ord a => [a] -> [a]
Т.е. она сортирует список любого типа а, который относится к классу упорядоченных, т.е. значения которого можно сравнивать.

Но функциональные языки, вроде Хаскеля, слишком высокоуровневые, они решают половину задачи — позволяют описать алгоритм в общей форме, но не позволяют реализовать его максимально эффективно. Тот же приведенный пример сортировки — не настоящий quicksort, потому что настоящий quicksort работает внутри массива, не создавая новых массивов или списков.

Короче, идея интересная, не новая, но хорошего решения у нее пока нет.
Re: Expression Tree для описания алгоритмов
От: Mazay Россия  
Дата: 16.05.10 11:40
Оценка: 1 (1) +1 -1
Здравствуйте, barn_czn, Вы писали:

_>Есть такая проблема, что описания различных алгоритмов приводятся в самой разной форме: псевдокод, С++, набор формул и слов.

...
_>Как бы было здорово иметь библиотеку с описанием алгоритмов в терминах одного Expression Tree, выражения которого легко бы было транслировать в другие языки, специфицировать под конкретные типы данных, отображать в удобочитаемой раскрашеной цветами радуги форме.


Разные языки необходимы, поскольку они дают разные уровни абстракции.
Главное гармония ...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.