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, выражения которого легко бы было транслировать в другие языки, специфицировать под конкретные типы данных, отображать в удобочитаемой раскрашеной цветами радуги форме.


Разные языки необходимы, поскольку они дают разные уровни абстракции.
Главное гармония ...
Re[7]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.05.10 17:18
Оценка: -1 :)
Здравствуйте, barn_czn, Вы писали:

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

G>>Выделенное — это твои трудности. По факту алгоритм на хаскеле или другом ФЯ оказывается гораздо читаемее.
_>Да, это мои трудности, и еще трудности нескольких миллионов, и их к сожалению большинство.
Это заявление в духе "миллионы леммингов не могут ошибаться" ? Практика показала что могут.


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

G>>И что? Давайте теперь всю математику на С перепишем
_>Если вы не заметили это уже давно делается.
5 лет отучился на математическом факультете и не заметил.


_>Sum(list) тоже не плохо, и что?

Ну так в том и вопрос как тот самый Sum написать

_>Краткость != читабельность..

Почти всюду краткость == читабельность.

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


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


let sum = fold (+) 0

Даже в таком простом коде на F# используется несколько концепций, которых нету в C#.

_>Ведь F# — функциональный язык, а так как он для .net то любой код написаный на нем легко дизассемблировать на C#.

Только понять потом что написано — нереально.

_>Что мне даст изучение какого либо ФЯ?

Оно сделает тебя более профессиональным программистом.
Re[5]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 16.05.10 19:34
Оценка: +1 -1
Занятное заблуждение. Странно, мне этот вопрос казался очевидным.

Сборка мусора обладает особым свойством: она может обрабатывать недетерминированное удаление объектов, когда множество объектов ссылается на один и тот же объект, и порядок удаления объектов невозможно определить на момент компиляции.

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

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

_>В том то и дело что надо не free() заменить на =null, а вообще убрать free(), и пусть транслятор сам думает где надо вызывать этот free().Чтоб это стало возможным нужна семантика языка позволяющая делать это безошибочно.


Решение, заключающееся в убирании всех free() обладает только одним недостатком: в каких-то случаях оно может быть менее эффективным, так как ссылка на объект может сохраняться, хотя она уже не нужна. Думаю, эта проблема может быть полностью решена путем статического анализа исходного кода.
Re[4]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 16.05.10 19:50
Оценка: -1 :)
FR>
FR>qsort []     = []
FR>qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
FR>


FR>Ни чем ни хуже чем псевдокод по понятности.


Лол. +100. Это ты знатно отмочил.
Re[6]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 16.05.10 20:08
Оценка: -1
Я так понял, ты по работе занимаешься дотнетом. Программируешь, видимо, на C#. Видимо, для общего развития ты изучил функциональные языки.

Я не спрашиваю тебя, зачем тебе понадобилось изучать функциональные языки, когда они тебе по работе не нужны. Мало ли чем люди в свободное время занимаются.

Как ты думаешь, много ли программистов, как ты, изучают в свободное время функциональные языки? Почему ты пытаешься стыдить человека тем, что он не знает функциональных языков?

С таким же успехом можно упрекать людей в том, что они не знают brainfuck. Кстати, код быстрой сортировки на Хаскеле по "понятности" приближается к brainfuck'у.

G>
G>fold (+) list
G>

Здесь написано: свернуть (+) список.

Не знаю, мне не очень понятно.

Понятно было бы так, например:

x = sum of all items in list
Re[7]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.05.10 20:43
Оценка: +1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Я так понял, ты по работе занимаешься дотнетом. Программируешь, видимо, на C#. Видимо, для общего развития ты изучил функциональные языки.

ТЗИ>Я не спрашиваю тебя, зачем тебе понадобилось изучать функциональные языки, когда они тебе по работе не нужны. Мало ли чем люди в свободное время занимаются.
ТЗИ>Как ты думаешь, много ли программистов, как ты, изучают в свободное время функциональные языки? Почему ты пытаешься стыдить человека тем, что он не знает функциональных языков?
Я не пытаюсь стыдить человека за то что он чего-то не знает. Бравирование своим незнанием достойно порицания, а не само незнание.


ТЗИ>С таким же успехом можно упрекать людей в том, что они не знают brainfuck.

Если бы brainfuck подходил для какой-либо задачи лучше другого языка, то вполне можно было упрекать человека в том что он использует другой язык вместо brainfuck.

ТЗИ>Кстати, код быстрой сортировки на Хаскеле по "понятности" приближается к brainfuck'у.

Может приведешь быструю сортировку на brainfuck для сравнения?


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

ТЗИ>Здесь написано: свернуть (+) список.
Так и написано.

ТЗИ>Не знаю, мне не очень понятно.

От понимания семантики тебя ничего не избавит.

ТЗИ>Понятно было бы так, например:


ТЗИ>
ТЗИ>x = sum of all items in list
ТЗИ>

Это уже другой уровень абстракции, аналогичный Sum(list) или list.Sum() или sum list. Последнее кстати на haskell и повторяет "код" выше при выкидывании ненужных слов. Ведь при понимании семантики суммирования элементов списка тебе совершенно необязательно писать "of all items in".

Кроме того как будет работать intellisense для такого синтаксиса?
Re[2]: Expression Tree для описания алгоритмов
От: barn_czn  
Дата: 17.05.10 03:53
Оценка:
DM>Вообще, очень похожие на Ваши идеи высказывает Степанов (автор STL):
DM>http://video.yandex.ru/users/ya-events/view/129/
DM>http://video.yandex.ru/users/ya-events/view/128/

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

Правда плохое качество звука и не видно что там у него на слайдах ((. Надо почитать то о чем он рассказывает.
Re[5]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 04:06
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:


ТЗИ> Лол. +100. Это ты знатно отмочил.


Это ты отмачиваешь, меня злобные функциональщики примерно на таком коде и подловили, никаких
проблем с пониманием не было.
Хотя сейчас трава не зеленая уже, и я замечаю что у многих нет фона в виде давно изученного и
пусть даже уже успешно позабытого форта, лиспа и пролога
Re[7]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 04:08
Оценка: +1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Как ты думаешь, много ли программистов, как ты, изучают в свободное время функциональные языки? Почему ты пытаешься стыдить человека тем, что он не знает функциональных языков?


Еще 10 лет назад было полно народу которые бравировали тем что не знают ООП и он им совершенно не нужен, сейчас это почему-то редкие птицы, странно да?
Re[8]: Expression Tree для описания алгоритмов
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 17.05.10 05:44
Оценка: :))) :)
Здравствуйте, FR, Вы писали:

FR>Еще 10 лет назад было полно народу которые бравировали тем что не знают ООП и он им совершенно не нужен


А сейчас люди изучают ФП и понимают, что ООП действительно не нужен.
Re[6]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 11:28
Оценка: -3
Только не надо совсем в бред впадать. Для человека, не знающего Хаскель, этот кусочек кода представляет собой абракадабру. Только человек с совсем уж искаженным программированием мышлением может заявить, что он по понятности такой же, как псевдокод.

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

Как можно взять нормальный кусок английского текста и сказать, что он по понятности ровно такой же, как что-то вроде
lidfulj3*)(##*&kd*97
(это валидный код на моем собственном языке программирования FuckTheMotherFuckers++, который я придумал пять минут назад, и я этот кусок кода, заметьте, прекрасно понимаю, но никогда не скажу, что он по понятности ничем не уступает английскому тексту, поскольку у меня еще не настолько искаженное программированием сознание).

На этот пост можно не отвечать, так как дальше обсуждать такой очевидный вопрос не вижу смысла.
Re[7]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 11:37
Оценка: -2 :)
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Только не надо совсем в бред впадать. Для человека, не знающего Хаскель, этот кусочек кода представляет собой абракадабру. Только человек с совсем уж искаженным программированием мышлением может заявить, что он по понятности такой же, как псевдокод.


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

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


Ты сам бредишь, у тебя мозги зомбированы императивщиной.
Re[5]: Expression Tree для описания алгоритмов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.05.10 11:53
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

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


FR>>Ни чем ни хуже чем псевдокод по понятности.


ТЗИ> Лол. +100. Это ты знатно отмочил.


Ну вот давай попробуем написать тот же самый алгоритм русскими словами:

быстрая сортировка пустого списка = пустой список
быстрая сортировка списка, первый элемент которого x, а хвост списка xs = 
  конкатенация 3 списков:
    быстрой сортировки xs, из которого отфильтрованы элементы, меньшие x
    списка из одного элемента x
    быстрой сортировки xs, из которого отфильтрованы элементы, большие или равные x


Единственное, что может быть не сразу очевидно — это смысл операторов [], :, ++, но этот смысл элементарно восстанавливается, если знать, как устроена быстрая сортировка.
Re: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 12:17
Оценка:
Здравствуйте, barn_czn, Вы писали:

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


В этом плане мне очень нравится литературное (грамотное) программирование, которое ввел еще Д. Кнут. В этом случае алгоритм пишется в специальной среде, на выходе которой получается TeX-файл, в котором есть описание алгоритма, и исходник на языке программирования (в случае паскаля крайне плохо оформленный). Если говорить про описание алгоритма, то это один из лучших способов (имхо). Основные идеи тут.
Re[6]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 12:20
Оценка: +1 -1
N>
N>быстрая сортировка пустого списка = пустой список
N>быстрая сортировка списка, первый элемент которого x, а хвост списка xs = 
N>  конкатенация 3 списков:
N>    быстрой сортировки xs, из которого отфильтрованы элементы, меньшие x
N>    списка из одного элемента x
N>    быстрой сортировки xs, из которого отфильтрованы элементы, большие или равные x
N>

Вот то-то и оно, что этот алгоритм не только синтаксически, но и семантически непонятен. Собственно говоря, это вообще не быстрая сортировка — это другой алгоритм, работающий совершенно по-другому. Общего с быстрой сортировкой у него только рекурсивность.

Хорошенькое мы получаем объяснение алгоритма, приводя другой алгоритм.

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

Описание алгоритма шиворот-навыворот + состоящий из значков синтаксис = абракадабра.

Нормальное-то описание алгоритма быстрой сортировки (а не какого-то другого) выглядит примерно так (из Википедии):

Выбираем в массиве некоторый элемент, который будем называть опорным элементом. С точки зрения корректности алгоритма выбор опорного элемента безразличен. С точки зрения повышения эффективности алгоритма выбираться должна медиана, но без дополнительных сведений о сортируемых данных её обычно невозможно получить. Известные стратегии: выбирать постоянно один и тот же элемент, например, средний или последний по положению; выбирать элемент со случайно выбранным индексом.
Операция разделения массива: реорганизуем массив таким образом, чтобы все элементы, меньшие или равные опорному элементу, оказались слева от него, а все элементы, большие опорного — справа от него. Обычный алгоритм операции:
Два индекса — l и r, приравниваются к минимальному и максимальному индексу разделяемого массива соответственно.
Вычисляется индекс опорного элемента m.
Индекс l последовательно увеличивается до m до тех пор, пока l-й элемент не превысит опорный.
Индекс r последовательно уменьшается до m до тех пор, пока r-й элемент не окажется меньше опорного.
Если r = l — найдена середина массива — операция разделения закончена, оба индекса указывают на опорный элемент.
Если l < r — найденную пару элементов нужно обменять местами и продолжить операцию разделения с тех значений l и r, которые были достигнуты. Следует учесть, что если какая-либо граница (l или r) дошла до опорного элемента, то при обмене значение m изменяется на r-й или l-й элемент соответственно.
Рекурсивно упорядочиваем подмассивы, лежащие слева и справа от опорного элемента.
Базой рекурсии являются наборы, состоящие из одного или двух элементов. Первый возвращается в исходном виде, во втором, при необходимости, сортировка сводится к перестановке двух элементов. Все такие отрезки уже упорядочены в процессе разделения.

Re[8]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 12:47
Оценка: +1
FR>Но если этот человек хоть немного изучал математику хаскельный псевдокод ему будет понятней чем сишный.

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

И вообще, хватит отождествлять математику и функциональное программирование. А императивное программирование — это что ли не математика?

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

То, что функциональное программирование похоже на запись формул в математике, не делает его ближе к математике, чем императивное или какое-либо другое программирование.

FR>Ты сам бредишь, у тебя мозги зомбированы императивщиной.


А ты делаешь ложное противопоставление, не понимая, что функциональное и императивное программирование — всего лишь две эквивалентные формы записи формальных соотношений.
Re[7]: Expression Tree для описания алгоритмов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.05.10 12:50
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

N>>
N>>быстрая сортировка пустого списка = пустой список
N>>быстрая сортировка списка, первый элемент которого x, а хвост списка xs = 
N>>  конкатенация 3 списков:
N>>    быстрой сортировки xs, из которого отфильтрованы элементы, меньшие x
N>>    списка из одного элемента x
N>>    быстрой сортировки xs, из которого отфильтрованы элементы, большие или равные x
N>>

ТЗИ>Вот то-то и оно, что этот алгоритм не только синтаксически, но и семантически непонятен. Собственно говоря, это вообще не быстрая сортировка — это другой алгоритм, работающий совершенно по-другому. Общего с быстрой сортировкой у него только рекурсивность.

ТЗИ>Хорошенькое мы получаем объяснение алгоритма, приводя другой алгоритм.

ТЗИ>Нормальное-то описание алгоритма быстрой сортировки (а не какого-то другого) выглядит примерно так (из Википедии):

ТЗИ>

ТЗИ>Выбираем в массиве некоторый элемент, который будем называть опорным элементом.


В функциональном описании этот элемент назван x.

ТЗИ>

ТЗИ>Операция разделения массива: реорганизуем массив таким образом, чтобы все элементы, меньшие или равные опорному элементу, оказались слева от него, а все элементы, большие опорного — справа от него.


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

ТЗИ>

ТЗИ>Рекурсивно упорядочиваем подмассивы, лежащие слева и справа от опорного элемента.


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

ТЗИ>Описание алгоритма шиворот-навыворот + состоящий из значков синтаксис = абракадабра.

А что, существует синтаксис, не состоящий из значков?
Re[6]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 12:50
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


Зачастую алгоритмы описывают байты и операции с ними, а также включают различные вопросы производительности, что не всегда так уж однозначно переводится на ФЯ. Например, если взять alpha-beta поиск, то там в C-варианте будут функции DoMove, и UndoMove. Соответственно, для того, чтобы функциональный язык генерировал оптимальный код, необходимо чтобы он был в курсе сакрального равенства Position = UndoMove(DoMove(Position, Move), Move).
Re[8]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 13:00
Оценка:
Ладно, какова алгоритмическая сложность алгоритма на Хаскеле? Если это тот же самый алгоритм, его сложность в среднем N log N, так? (Про потребление памяти скромно умолчим).
Re[9]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:01
Оценка: -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

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


ТЗИ>Если человек изучал математику и не изучал программирование, ему оба варианта будут непонятны.

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

ТЗИ>А вот нормальное описание на естественном языке он с легкостью воспримет.

Только доказать что нормальное "описание на естественном языке" делает то что надо — далеко нетривиальная задача.

ТЗИ>И вообще, хватит отождествлять математику и функциональное программирование. А императивное программирование — это что ли не математика?

Императивное программирование опирается на изменяемое состояние, которое не имеет никакого отношения к математике.

ТЗИ>Математика — это вообще всего лишь набор формальных соотношений. То, как в математике принято записывать формулы — всего лишь традиция.

Программа на том же хаскеле тоже лишь набор формальных (проверяемых компилятором) отношений.

ТЗИ>То, что функциональное программирование похоже на запись формул в математике, не делает его ближе к математике, чем императивное или какое-либо другое программирование.

Доказывать такие утверждения надо.

А вообще математический аппарат (типа индукции) очень хорошо подходит для рассуждения над функциональными программами. А вот императивные программы таким похвастаться не могут. К чему бы это?
Re[7]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:08
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

N>>
N>>быстрая сортировка пустого списка = пустой список
N>>быстрая сортировка списка, первый элемент которого x, а хвост списка xs = 
N>>  конкатенация 3 списков:
N>>    быстрой сортировки xs, из которого отфильтрованы элементы, меньшие x
N>>    списка из одного элемента x
N>>    быстрой сортировки xs, из которого отфильтрованы элементы, большие или равные x
N>>

ТЗИ>Вот то-то и оно, что этот алгоритм не только синтаксически, но и семантически непонятен. Собственно говоря, это вообще не быстрая сортировка — это другой алгоритм, работающий совершенно по-другому. Общего с быстрой сортировкой у него только рекурсивность.
Ты не знаешь быструю сортировку.

ТЗИ>Нормальное-то описание алгоритма быстрой сортировки (а не какого-то другого) выглядит примерно так (из Википедии):


ТЗИ>

ТЗИ>Выбираем в массиве некоторый элемент, который будем называть опорным элементом. С точки зрения корректности алгоритма выбор опорного элемента безразличен. С точки зрения повышения эффективности алгоритма выбираться должна медиана, но без дополнительных сведений о сортируемых данных её обычно невозможно получить. Известные стратегии: выбирать постоянно один и тот же элемент, например, средний или последний по положению; выбирать элемент со случайно выбранным индексом.
ТЗИ>Операция разделения массива: реорганизуем массив таким образом, чтобы все элементы, меньшие или равные опорному элементу, оказались слева от него, а все элементы, большие опорного — справа от него. Обычный алгоритм операции:
ТЗИ>Два индекса — l и r, приравниваются к минимальному и максимальному индексу разделяемого массива соответственно.
ТЗИ>Вычисляется индекс опорного элемента m.
ТЗИ>Индекс l последовательно увеличивается до m до тех пор, пока l-й элемент не превысит опорный.
ТЗИ>Индекс r последовательно уменьшается до m до тех пор, пока r-й элемент не окажется меньше опорного.
ТЗИ>Если r = l — найдена середина массива — операция разделения закончена, оба индекса указывают на опорный элемент.
ТЗИ>Если l < r — найденную пару элементов нужно обменять местами и продолжить операцию разделения с тех значений l и r, которые были достигнуты. Следует учесть, что если какая-либо граница (l или r) дошла до опорного элемента, то при обмене значение m изменяется на r-й или l-й элемент соответственно.
ТЗИ>Рекурсивно упорядочиваем подмассивы, лежащие слева и справа от опорного элемента.
ТЗИ>Базой рекурсии являются наборы, состоящие из одного или двух элементов. Первый возвращается в исходном виде, во втором, при необходимости, сортировка сводится к перестановке двух элементов. Все такие отрезки уже упорядочены в процессе разделения.


Собственно алгоритм выделен, остальное детали реализации.
Кстати последнее предложение избыточно, рекурсию можно продолжать пока длина подмассива не станет равна нулю.

Если собрать выделенное, с учетом последнего замечания, то получится примерно тоже самое что приводил nikov
Re[8]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:08
Оценка:
Здравствуйте, FR, Вы писали:

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


Для такого простого случая это не суть важно. Вряд ли бы кто описывал алгоритм, где надо просто найти сумму. В более сложном случае и счетчик цикла может перепрыгивать, и выход из цикла может произойти досрочно, и сам массив/список может быть надо будет изменить на лету...
Re[9]: Expression Tree для описания алгоритмов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.05.10 13:10
Оценка: +1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Ладно, какова алгоритмическая сложность алгоритма на Хаскеле? Если это тот же самый алгоритм, его сложность в среднем N log N, так?

Да.

ТЗИ>(Про потребление памяти скромно умолчим).

Можно и не умалчивать: в Haskell алгоритм работает не in-place, поэтому используется дополнительная память.
Re[8]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:12
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Это заявление в духе "миллионы леммингов не могут ошибаться" ? Практика показала что могут.


Ну... вот, например, при программировании шахмат возникает достаточно много различных алгоритмических задач, которые надо реализовать оптимальным образом. При этом в списке самых сильнейших шахматных движков и близко нет написанных на функциональных языках программирования. Не потому ли, что они для этого мало приспособлены???
Re[7]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:16
Оценка:
Здравствуйте, Mystic, Вы писали:

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


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


M>Зачастую алгоритмы описывают байты и операции с ними, а также включают различные вопросы производительности, что не всегда так уж однозначно переводится на ФЯ.

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

M>Например, если взять alpha-beta поиск, то там в C-варианте будут функции DoMove, и UndoMove. Соответственно, для того, чтобы функциональный язык генерировал оптимальный код, необходимо чтобы он был в курсе сакрального равенства Position = UndoMove(DoMove(Position, Move), Move).

Тут как раз ленивость рулит, которая в хаскеле есть. Можно генерировать деревья всех вариантов, а потом отсекать неподходящие, не генерируя полное дерево. Причем из-за неизменяемости одинаковые поддеревья будут присутствовать в одном экземпляре и вычисляться не более одного раза.
Re[9]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:19
Оценка:
Здравствуйте, Mystic, Вы писали:

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


G>>Это заявление в духе "миллионы леммингов не могут ошибаться" ? Практика показала что могут.


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

1)Пока нет
2)Для шахматных алгоритмов разработаны быстрые реализации при помощи битовых операций, которые хорошо делаются на низкоуровневых языках
3)Про скорость мы тут не говорили, мы обсуждаем понятность записи алгоритмов на различных языках
Re[10]: Expression Tree для описания алгоритмов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.05.10 13:22
Оценка:
Здравствуйте, gandjustas, Вы писали:

ТЗИ>>И вообще, хватит отождествлять математику и функциональное программирование. А императивное программирование — это что ли не математика?

G>Императивное программирование опирается на изменяемое состояние, которое не имеет никакого отношения к математике.

Как ни странно, но первое доказательство арифметичности вычислимых функций (то есть, утверждения о том, что для любой вычислимой функции f формула y = f(x) может быть выражена как утверждение на языке арифметики Пеано со свободными переменными x и y) было построено с использованием в качестве модели вычислений универсальных регистровых машин (то есть машин с изменяемым состоянием). А арифметичность функций, вычислимых, например, в лямбда-исчислении, следует уже из эквивалентности различных моделей вычислений (то есть возможности написать интерпретатор лямбда-исчисления на регистровых машинах). Так что я бы поостерегся говорить, что изменяемое состояние не имеет никакого отношения к математике.
Re[8]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:29
Оценка:
Здравствуйте, gandjustas, Вы писали:

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

G>Потому что для последовательности шагов еще надо доказать что она приводит к этому результату.

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

G>Тут как раз ленивость рулит, которая в хаскеле есть. Можно генерировать деревья всех вариантов, а потом отсекать неподходящие, не генерируя полное дерево. Причем из-за неизменяемости одинаковые поддеревья будут присутствовать в одном экземпляре и вычисляться не более одного раза.


Рулит, да не совсем. Во-первых, к одной и той же позиции можно прийти с перестановками ходов. В этом случае в шахматных движках обычно используют Z-Orbice ключи, которые позволяю быстро определять, а была ли такая позиция. Во-вторых, при переборе на менее-более значительную глубину, количество узлов превышает оперативную память. Соответственно, позиции из боковых вариантов удаляются из хэша.
Re[11]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:31
Оценка:
Здравствуйте, nikov, Вы писали:

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


ТЗИ>>>И вообще, хватит отождествлять математику и функциональное программирование. А императивное программирование — это что ли не математика?

G>>Императивное программирование опирается на изменяемое состояние, которое не имеет никакого отношения к математике.

N>Как ни странно, но первое доказательство арифметичности вычислимых функций (то есть, утверждения о том, что для любой вычислимой функции f формула y = f(x) может быть выражена как утверждение на языке арифметики Пеано со свободными переменными x и y) было построено с использованием в качестве модели вычислений универсальных регистровых машин (то есть машин с изменяемым состоянием). А арифметичность функций, вычислимых, например, в лямбда-исчислении, следует уже из эквивалентности различных моделей вычислений (то есть возможности написать интерпретатор лямбда-исчисления на регистровых машинах). Так что я бы поостерегся говорить, что изменяемое состояние не имеет никакого отношения к математике.


Ну еще можно машину тьюринга вспомнить.

Тем не менее большинство методов доказательств не работают с изменяемым состоянием.
Re[10]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:32
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>2)Для шахматных алгоритмов разработаны быстрые реализации при помощи битовых операций, которые хорошо делаются на низкоуровневых языках


А в чем проблема эти битовые операции перенести на функциональные языки???
Re[11]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:33
Оценка:
Здравствуйте, Mystic, Вы писали:

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


G>>2)Для шахматных алгоритмов разработаны быстрые реализации при помощи битовых операций, которые хорошо делаются на низкоуровневых языках


M>А в чем проблема эти битовые операции перенести на функциональные языки???

спросите у создателей языков.
Наверное в том что они мало востребованы.
Re[8]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 13:42
Оценка:
Похоже, у нас разное представление об алгоритме быстрой сортировки.
Re[9]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:42
Оценка:
Здравствуйте, Mystic, Вы писали:

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


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

G>>Потому что для последовательности шагов еще надо доказать что она приводит к этому результату.

M>Тогда неплохо было бы определиться с понятием, что такое алгоритм И какие алгоритмы требуется формально записывать. Сне почему-то кажется, что изначально автор интересовался именно "конечной последовательностью шагов".


Мне больше всех нравится определение Маркова:

Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату

Re[9]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:45
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Похоже, у нас разное представление об алгоритме быстрой сортировки.


Ага, у меня — об алгоритме, а у тебя — о реализации.
Re[10]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 13:46
Оценка: :)
Да другой это алгоритм. Для начала быстрая сортировка — это сортировка обменами. И разделение множеств там по-другому происходит, а не тупой "фильтрацией". И вопрос выбора среднего элемента там как-то опущен.

Если вам Хаскель понятнее, пишите своим женам письма на Хаскеле. И переписываться на RSDN'е можете тоже на Хаскеле.
Re[9]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 13:53
Оценка: -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Если человек изучал математику и не изучал программирование, ему оба варианта будут непонятны. А вот нормальное описание на естественном языке он с легкостью воспримет.


Не всегда, вот то описание которое ты дал вряд-ли, там без знания основ программирования ничего ни понятно.

ТЗИ>И вообще, хватит отождествлять математику и функциональное программирование. А императивное программирование — это что ли не математика?


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

ТЗИ>Математика — это вообще всего лишь набор формальных соотношений. То, как в математике принято записывать формулы — всего лишь традиция.


Ну не скажи, математика все-таки стремится к максимальной простоте и понятности.

ТЗИ>То, что функциональное программирование похоже на запись формул в математике, не делает его ближе к математике, чем императивное или какое-либо другое программирование.


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


ТЗИ>А ты делаешь ложное противопоставление, не понимая, что функциональное и императивное программирование — всего лишь две эквивалентные формы записи формальных соотношений.


В том дело что с практической точки зрения далеко не эквивалентные.
Re[9]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 13:54
Оценка:
Здравствуйте, Mystic, Вы писали:


M>Для такого простого случая это не суть важно. Вряд ли бы кто описывал алгоритм, где надо просто найти сумму. В более сложном случае и счетчик цикла может перепрыгивать, и выход из цикла может произойти досрочно, и сам массив/список может быть надо будет изменить на лету...


В более сложных случаях тоже проще и декларативнее получается.
Re[2]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 13:57
Оценка: :)
Здравствуйте, FR, Вы писали:

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

FR>которые нужно реализовать на C++ сначала делаю на питоне (сейчас больше на окамле) это дает существенный выигрыш во времени
FR>разработки.

Остается только вопрос зачем с ОКамла на С++ что-то переписывать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:59
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>

G>Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату


Для анализа алгоритма еще важны соображения эффективности. Т. е. любой алгоритм должен иметь вычислительную сложность, которую мы должны уметь вычислить.
Re[11]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 14:03
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Да другой это алгоритм. Для начала быстрая сортировка — это сортировка обменами. И разделение множеств там по-другому происходит, а не тупой "фильтрацией". И вопрос выбора среднего элемента там как-то опущен.

Переключаем википедию на английский и смотрим:
http://en.wikipedia.org/wiki/Quicksort#Algorithm
 function quicksort(array)
     var list less, greater
     if length(array) ≤ 1  
         return array  
     select and remove a pivot value pivot from array
     for each x in array
         if x ≤ pivot then append x to less
         else append x to greater
     return concatenate(quicksort(less), pivot, quicksort(greater))

Почти тоже что на хаскеле, но отдельно делается filter для каждой половины, хотя это можно заоптимизировать.

ТЗИ>Если вам Хаскель понятнее, пишите своим женам письма на Хаскеле. И переписываться на RSDN'е можете тоже на Хаскеле.

Слив засчитан.
Хотя если вы с женой общаетесь на C\C++ я хочу на это посмотреть
Re[11]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 14:05
Оценка:
Здравствуйте, Mystic, Вы писали:

M>А в чем проблема эти битовые операции перенести на функциональные языки???


Такой проблемы нет http://caml.inria.fr/pub/docs/old-311/libref/Pervasives.html#7_Bitwiseoperations
Re[11]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 14:06
Оценка:
Здравствуйте, Mystic, Вы писали:

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


G>>

G>>Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату


M>Для анализа алгоритма еще важны соображения эффективности. Т. е. любой алгоритм должен иметь вычислительную сложность, которую мы должны уметь вычислить.

Для анализа важна ассимптотическая сложность, которая почти всегда одинакова для императивного и для функционального языка. Иногда в функциональном языке требуется дополнительный множитель log(N) для копирования данных, он отсечение вариантов это не тот случай.
Re[12]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 14:08
Оценка:
Здравствуйте, FR, Вы писали:

FR>Такой проблемы нет http://caml.inria.fr/pub/docs/old-311/libref/Pervasives.html#7_Bitwiseoperations


Мне тоже так казалось, что не может быть проблемы только в битовых операциях. А в чем тогда проблема?
Re[13]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 14:23
Оценка: +1
Здравствуйте, Mystic, Вы писали:


M>Мне тоже так казалось, что не может быть проблемы только в битовых операциях. А в чем тогда проблема?


В том что очень узкое подмножество писателей шахматных алгоритмов не пересеклось с не очень широким подмножеством
функциональных программистов
Re[5]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 14:30
Оценка:
Здравствуйте, barn_czn, Вы писали:

_>Ну это для вас проще.


Для меня тоже. Причем то что он написал — это и есть чистое описание алогоритма. Особенно если говорить о Прологовском варианте (кстати, не пойму почему язык так не заслужено забыт!).

Вот тебе вариант на языке с сиоразным синтаксисом (но тоже с поддержкой сопоставления с образцом):
def qSort(lst)
{
  | []            => [];
  | head :: tail  => qSort(tail.Filter(_ < head)) + [head] + qSort(tail.Filter(_ >= head));
}

WriteLine(qSort([3,1,6,9,2,5,4,0]));

Пара пояснений, чтобы человек не знающий что такое сопоставление с образцом и частичное применение понял суть.
Конструкции "| []" и "| head :: tail" — это образцы. Если список переданный в качестве параметра пуст, то сопоставляется образец "| []" и соответственно возвращается пустой список (описываемый литералом "[]". Если список содержит хотя бы один элемент, то он сопоставляется с образцом "| head :: tail". Этот образец производит декомпозицию списка на голову (первый элемент списка) и хвост (список состоящий из всех элементов исходного списка за исключением головы). При этом головной элемент связывается переменной head, а хвост списка связывается с переменной tail.
Остальное все ясно само собой. Единственный мутный момент — это выражения "_ < head" и "_ >= head". Это так называемое частичное применение. В случае операторов с помощью частичного применения можно получить из оператора функцию. В данном случае функции lessThen и greatThen (соответственно). Подчеркиваение описывает свободный параметр (который становится параметром новой фунции). С применением лямбд это будет выглядеть так:
def qSort(lst)
{
  | []            => [];
  | head :: tail  => qSort(tail.Filter(x => x < head)) + [head] + qSort(tail.Filter(x => x >= head));
}


Собственно код читается практически так же как та самая математическая запись: Отобрать все элементы меньшие головного и рекурсивно отсортировать полученный список. Далее отобрать все элементы больше головного и так же рекурсивно отсортировать полученный список. Конкатенировать первый отсортированный под список, головной элемент и второй отсортированный под список.

_> То что вы написали на хаскеле и прологе для меня филькина грамота,


Очень смешно. И ты еще ведешь речь о каком-то "экспрешон эспиранто"?
А как же ты тогда поймешь ту самую математическую запись?
quickSort([]) = []


_>и желания вникнуть особого нет в этот читабельный по вашему мнению синтаксис.


А у кого есть желание учить синтаксис и семантику твоего псевдокода?

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


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

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


У С легкость восприятия ниже плинтуса. А те кто не знаком с С, вообще ничего не поймут.

Потому тебе и говорят, что твоя идея — утопия.

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



А, ну, то есть задачи читать написанного нет?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 14:32
Оценка:
Здравствуйте, Mystic, Вы писали:

Например, класс матриц описывается с использованием грамотного программирования примерно так: math.pdf.
Re[12]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 14:37
Оценка:
G>Слив засчитан.

Какой слив, не понял? Ты меня пытаешься оскорбить?

G>Хотя если вы с женой общаетесь на C\C++ я хочу на это посмотреть


Да уж, такой дебильный ход мыслей может быть только в голове у программиста. Наверно, я все-таки имел в виду нормальный человеческий язык. Мы ведь здесь спорили о том, что, дескать, на Хаскеле понятнее, чем на английском.

Вот я и говорю: если вам на Хаскеле понятнее, чем на человеческом языке, общайтесь на Хаскеле.

В следующий раз, если сообщение будет написано не на Хаскеле, читать и отвечать не буду.
Re[4]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 14:41
Оценка:
Здравствуйте, FR, Вы писали:

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


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


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

А что насчет пирамидальной сортировки???
Re[13]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 14:43
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Да уж, такой дебильный ход мыслей может быть только в голове у программиста. Наверно, я все-таки имел в виду нормальный человеческий язык. Мы ведь здесь спорили о том, что, дескать, на Хаскеле понятнее, чем на английском.


Нормальный человеческий язык плохо подходит для такой узкоспециализированной вещи как описание алгоритмов, иначе математики не придумали бы свои закорючки, а самым мейнстримным языком программирования был бы расширенный кобол.
Re[7]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 14:45
Оценка:
Здравствуйте, barn_czn, Вы писали:

_>Ок, я действительно не изучал до сих пор ни одного ФЯ, немного правда читал про F#.


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

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

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


Ага. Только нет сопоставления с образцом и много чего не поддерживается или поддерживается не очень качественно. Но и на C# 3.0 можно писать намного проще чем на яве, скажем. И это же крайне усложняет преобразование C#-кода в ява-код.

_> Я сейчас, возможно наивно, полагаю что ФЯ дает просто краткий синтаксис использования всего этого.


Ну, да. ФЯ просто предоставляет синтаксис и семантику для манипулирования с кодом на уровне выражений. C# 3.0 стал на половину ФЯ. Если же этих фич нет, то реализация алгоритмов становится запутаннее, сложнее и как следствие больше по объему.

_>Никаких принципиально новых выражений в ФЯ нет.


Ну, да. А любой код на любом языке высокого уровня (С, С++, Ява и т.п.) тоже не имеет ничего приципиально нового по сравнению с ассемблерами (тем же IL-ом к примеру). Но это только если не считать, что тот же if — это фича которая позволяет выражать мысль так как хочется, а не так как получается на том же ассемблере.

_>Ведь F# — функциональный язык, а так как он для .net то любой код написаный на нем легко дизассемблировать на C#.


Ну, так описывай свои алгоритмы на IL или x86-ом ассемблере. За чем дело встало?

Принципиально они одинаково мощны. Ведь все они полны по Тюрингу.

_>Что мне даст изучение какого либо ФЯ?


Знания. В прочем, если ты не видишь разницу между ассемблером и скажем С, то видимо ничего.
Если же видишь, то просто поверь, что такая же разница есть и в случае императивный язык -> функциональный.

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


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


Надо пробовать. А когда попробуешь будешь думать. За одно и вопрос твой сам сбой решится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 14:50
Оценка: +1
Здравствуйте, FR, Вы писали:

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


Да, ну. Алгоритм тот же. Просто фолд — это универсальная функция из которой можно получить в том числе и конкретную функцию сум.

FR>Этот "краткий синтаксис использования" дает новое качество.


+1

FR>А писать на C# функционально очень похоже на писание на Си объектно-ориентированно.


Ну, это ты загнул. C# 3.0 позволяет весьма сносно писать в функциональном стиле. Но это только лишь потому, что он на половину стал ФЯ (получил одну из главных фишек функциональных языков — ФВП).

Конечно есть множество ФЯ которые поддерживают ФП намного лучше шарпа (да почти все ), но все же Шарп тоже позволяет писать очень даже неплохо. Особенно если применять ЛИНК.

FR>Думать, конечно надо, но малополезно, лучше изучить любой понравившийся функциональный язык, теоретически ничего ни поймешь.


+1

Кстати, о Немерле . Если человек знаком с C#, то изучить Немерле можно недели за две не напрягаясь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 14:51
Оценка:
Здравствуйте, FR, Вы писали:

M>>Для такого простого случая это не суть важно. Вряд ли бы кто описывал алгоритм, где надо просто найти сумму. В более сложном случае и счетчик цикла может перепрыгивать, и выход из цикла может произойти досрочно, и сам массив/список может быть надо будет изменить на лету...


FR>В более сложных случаях тоже проще и декларативнее получается.


Мне показалось, что он об этом и говорил.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 14:53
Оценка:
Здравствуйте, nikov, Вы писали:

N>Ну вот давай попробуем написать тот же самый алгоритм русскими словами:


N>
N>быстрая сортировка пустого списка = пустой список
N>быстрая сортировка списка, первый элемент которого x, а хвост списка xs = 
N>  конкатенация 3 списков:
N>    быстрой сортировки xs, из которого отфильтрованы элементы, меньшие x
N>    списка из одного элемента x
N>    быстрой сортировки xs, из которого отфильтрованы элементы, большие или равные x
N>


Это все хорошо, только на C/C++ записывается совершенно другой алгоритм. Там делается акцент на том, как выполнить быструю сортировку не создавая дополнительные структуры. Так что это разные алгоритмы в моем понимании. Соответственно интересует, как на ФЯ описать алгоритм, который бы четко давал понять, как расходовать O(1) памяти сверх занятой списком. Также неудовлетворителен тот факт, что в качестве x мы берем первый элемент списка.
Re[8]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 14:57
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>
G>let sum = fold (+) 0
G>

G>Даже в таком простом коде на F# используется несколько концепций, которых нету в C#.

Э...
Func<List<int>, int> sum = lst => lst.Aggregate(0, (x, acc) => x + acc);

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

_>>Ведь F# — функциональный язык, а так как он для .net то любой код написаный на нем легко дизассемблировать на C#.

G>Только понять потом что написано — нереально.

Да и дезасемблировать не реально. Рефлектор будет падать постоянно.

_>>Что мне даст изучение какого либо ФЯ?

G>Оно сделает тебя более профессиональным программистом.

+1
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 15:05
Оценка: :)
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Как ты думаешь, много ли программистов, как ты, изучают в свободное время функциональные языки? Почему ты пытаешься стыдить человека тем, что он не знает функциональных языков?


Не стыдить же людей тем, что они больше знают? А тем что они знают мало уж точно гордиться не чего.

ТЗИ>С таким же успехом можно упрекать людей в том, что они не знают brainfuck.


Толь есть троль . Причем тут эзотеричский язык? Его изобрели чтобы посмеяться. Знание же ФП действительно делает программиста лучше.
В прочем, ты это похоже и сам знаешь, но по-тролить охота. Да?

ТЗИ>Кстати, код быстрой сортировки на Хаскеле по "понятности" приближается к brainfuck'у.


Гы-гы.

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

ТЗИ>Здесь написано: свернуть (+) список.

На ОКамле здесь написано передать функции fold функцию (+) и список. Так как у функции есть еще один параметр, то в результате получается новая функция логика которой суммирование значений списка.

ТЗИ>Не знаю, мне не очень понятно.

ТЗИ>Понятно было бы так, например:

ТЗИ>
ТЗИ>x = sum of all items in list
ТЗИ>


А мне не очень понятно. Понятнее было бы так:
Посчитай все сама, плиз.

Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Expression Tree для описания алгоритмов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.05.10 15:06
Оценка: 3 (1)
Здравствуйте, VladD2, Вы писали:

VD>если говорить о Прологовском варианте (кстати, не пойму почему язык так не заслужено забыт!).


Потому что сейчас есть Curry.
Re[8]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 15:08
Оценка: +1 :)
Здравствуйте, FR, Вы писали:

FR>Еще 10 лет назад было полно народу которые бравировали тем что не знают ООП и он им совершенно не нужен, сейчас это почему-то редкие птицы, странно да?


Кстати, многие фанатичные функциональщики снова начали этим бравировать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 15:13
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Если человек изучал математику и не изучал программирование, ему оба варианта будут непонятны.


Ты изучал математику?

Приведи, плиз, математическое описание алгоритма быстрой сортировки Хора.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Expression Tree для описания алгоритмов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.05.10 15:17
Оценка: 3 (1)
Здравствуйте, Mystic, Вы писали:

M>Это все хорошо, только на C/C++ записывается совершенно другой алгоритм. Там делается акцент на том, как выполнить быструю сортировку не создавая дополнительные структуры. Так что это разные алгоритмы в моем понимании. Соответственно интересует, как на ФЯ описать алгоритм, который бы четко давал понять, как расходовать O(1) памяти сверх занятой списком.


Можно написать и с деструктивным in-place обновлением (здесь, здесь), но будет уже не так коротко и понятно.
Re[10]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 15:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Приведи, плиз, математическое описание алгоритма быстрой сортировки Хора.


Д. Кнут, третий том?

Вообще, сейчас во многих математических книгах появились вставки на псевдоимперативном языке программирования. В качестве примера можно привести книги по нейросетям, искусственному интеллекту в целом, генетическим алгоритмам и т. п. Т. е. алгоритм описываются в терминах стандартных операторов if, for, while, только вместо операторов идет текст.
Re[7]: Expression Tree для описания алгоритмов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.05.10 15:20
Оценка:
Здравствуйте, nikov, Вы писали:

N>Потому что сейчас есть Curry.


Который известен и используется много менее Пролога.
... << RSDN@Home 1.2.0 alpha 4 rev. 1471 on Windows 7 6.1.7600.0>>
AVK Blog
Re: Expression Tree для описания алгоритмов
От: BulatZiganshin  
Дата: 17.05.10 15:28
Оценка: 1 (1) :)
Здравствуйте, barn_czn, Вы писали:

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

_>Или я ошибаюсь?

ошибаешься! есть машина Тьюринга
Люди, я люблю вас! Будьте бдительны!!!
Re[7]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 15:29
Оценка:
Здравствуйте, nikov, Вы писали:

VD>>если говорить о Прологовском варианте (кстати, не пойму почему язык так не заслужено забыт!).


N>Потому что сейчас есть Curry.


А ты сам то это чудо используешь?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 15:34
Оценка:
Здравствуйте, Mystic, Вы писали:

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


VD>>Приведи, плиз, математическое описание алгоритма быстрой сортировки Хора.


M>Д. Кнут, третий том?


1. Вопрос бы не к тебе.

2. Я не помню у Кнута описания в виде мат.нотации.

Короче, ты не мудри. Ты приведи здесь это описание.

M>Вообще, сейчас во многих математических книгах появились вставки на псевдоимперативном языке программирования.


Мозг не надо пудрить. Если можешь привести мат.описание, приведи. Если не можешь, проходи мимо.
А твои эти псевдоимперативные языки не более чем императивные псевдоязыки (в том смысле, что их нет и они нигде не описаны).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 16:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>2. Я не помню у Кнута описания в виде мат.нотации.

У тебя узкое понятие математической нотации. Никто не мешает описывать в математических книгах алгоритмы в том виде, в каком это более удобно для понимания. Если тебя не интересует производительность алгоритма, можно просто ограничится доказательством того, что задача разрешима не приводя никакого алгоритма вообще. Если книга посвящена математическому исследованию алгоритмов (как, например, ACP Д. Кнута), то он вполне может использовать любую удобную ему запись, и это тоже будет математическая нотация.

VD>Короче, ты не мудри. Ты приведи здесь это описание.






VD>Мозг не надо пудрить. Если можешь привести мат.описание, приведи. Если не можешь, проходи мимо.


Нет проблем:
Re[9]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 16:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да, ну. Алгоритм тот же. Просто фолд — это универсальная функция из которой можно получить в том числе и конкретную функцию сум.


В Sum(list) вообще никакого алгоритма нет, fold же вполне стандартный примитив в ФЯ примерно такой же как for или while в императивщине.

FR>>А писать на C# функционально очень похоже на писание на Си объектно-ориентированно.


VD>Ну, это ты загнул. C# 3.0 позволяет весьма сносно писать в функциональном стиле. Но это только лишь потому, что он на половину стал ФЯ (получил одну из главных фишек функциональных языков — ФВП).


VD>Конечно есть множество ФЯ которые поддерживают ФП намного лучше шарпа (да почти все ), но все же Шарп тоже позволяет писать очень даже неплохо. Особенно если применять ЛИНК.


Ты же помнишь я тут даже доказывал что питон тоже функциональный, так вот после достаточно плотной работы на OCaml нf питоне писать функционально уже ломает

VD>Кстати, о Немерле . Если человек знаком с C#, то изучить Немерле можно недели за две не напрягаясь.


И таких человеков полтора на миллион
Все-таки за две недели нереально если до этого не был знаком с функциональщиной.
Re[10]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 16:12
Оценка:
VD>Ты изучал математику?
VD>Приведи, плиз, математическое описание алгоритма быстрой сортировки Хора.

Не понял вопроса. Смотря что подразумевать под "математическим". Собсно, запись этого алгоритма на любом языке программирования будет математическим описанием. Только надо определить нотацию. Математика — это всего лишь система формальных соотношений. Задаем понятия, аксиомы, теоремы — и вперед, вот вам математика, хоть с if-else'ами, хоть с функциями высшего порядка. В традиционной математике не принято использовать состояния, а все функции "мгновенны"? Какие проблемы, что мешает ввести состояния? А как же теория конечных автоматов?
Re[5]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 16:18
Оценка: 1 (1)
Здравствуйте, Mystic, Вы писали:

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


За Хаскель я не скажу, я сам его не знаю толком.
На Ocaml без проблем сделать тот же алгоритм что и на си, будет выглядеть красивше и читабельней.

M>А что насчет пирамидальной сортировки???


Пирамидальную я бы на OCaml сделал императивно, вот можешь посмотреть тут http://rosettacode.org/wiki/Sorting_algorithms/Heapsort#OCaml и сравнить например с C# http://rosettacode.org/wiki/Sorting_algorithms/Heapsort#C.23 на OCaml по моему получилось и короче и читабельней.
Вот питон уже не хуже http://rosettacode.org/wiki/Sorting_algorithms/Heapsort#Python

Так что по моему алгоритмы нужно описывать и прототипировать на выразительных языках, необязательно функциональных.
Re[6]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 16:44
Оценка: +1
Здравствуйте, FR, Вы писали:

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


Что-то мне подсказывает, что они одинаковые. Тут больше личного вкуса, а операторы совпадают. Так что тут во многом спор из-за ":=".
Re: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 16:45
Оценка:
Тут нужен не expression tree, а semantic tree, язык, семантическая насыщенность которого на порядок больше, чем у существующих на сегодня языков программирования.

Мне кажется, нечто подобное можно было бы изобразить на языке типа пролога. То есть первичным является построение онтологии, покрывающей все языки программирования, на которых предполагается генерировать код.
Re[13]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 16:55
Оценка:
Здравствуйте, Mystic, Вы писали:

VD>>Короче, ты не мудри. Ты приведи здесь это описание.


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

То что ты показал:
1. Не является описанием алгоритма Хоара.
2. Не является математическим описанием, а является описанием на каком-то суржике с преобладанием русского языка.

VD>>Мозг не надо пудрить. Если можешь привести мат.описание, приведи. Если не можешь, проходи мимо.


M>Нет проблем:

M>

Тут уже больше математических символов, но опять же слишком много английского и опять же это не алгоритм Хора.

ЗЫ

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



Это практически тоже самое что мы можем получить на функциональных языках (вариант на Немерле):
def quickSort(lst)
{
  | [] => [];
  | x :: xs  => qs($[ y | y in xs, y < x ]) + [x] + qs($[y | y in xs, y >= x]);
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 16:56
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Тут нужен не expression tree, а semantic tree, язык, семантическая насыщенность которого на порядок больше, чем у существующих на сегодня языков программирования.


А как эту семантическую насыщенность померять?
На глаз у того же хаскеля или пролога она и так на порядок выше чем у шарпа или явы.

ТЗИ>Мне кажется, нечто подобное можно было бы изобразить на языке типа пролога. То есть первичным является построение онтологии, покрывающей все языки программирования, на которых предполагается генерировать код.


Пролог да очень деклоративен, но местами тяжело транслируется и на императивщину и на функциональщину.
Хотя есть языки которые много взяли от пролога но при этом выглядят как обычные ФЯ например pure
http://code.google.com/p/pure-lang/
Re[10]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 17:01
Оценка:
Здравствуйте, FR, Вы писали:

FR>В Sum(list) вообще никакого алгоритма нет, fold же вполне стандартный примитив в ФЯ примерно такой же как for или while в императивщине.


Что значит нет алгоритма? Sum — это функция которая решат поставленную задачу. fold — это тоже функция которую легко преобразовать в Sum. Так что или алгоритм есть везде, или его нет нигде. Разница между фолдом и сум только в степени универсальности.

FR>Ты же помнишь я тут даже доказывал что питон тоже функциональный, так вот после достаточно плотной работы на OCaml нf питоне писать функционально уже ломает


Это не значит, что на питоне это делать очень неудобно (как на С писать в ООП-стиле)?
Да питон как и C# так себе ФЯ, но базовые фичи в них есть, так что в отличии от С на них можно с легкостью писать в функциональном стиле.

VD>>Кстати, о Немерле . Если человек знаком с C#, то изучить Немерле можно недели за две не напрягаясь.


FR>И таких человеков полтора на миллион


Ты льстишь. Таких человек конечно же полтора на 100 миллионов, но это ведь если считать от всего населения планеты .

FR>Все-таки за две недели нереально если до этого не был знаком с функциональщиной.


Совершенно реально. Мастером конечно не станешь, но писать в функциональном стиле будешь весьма уверенно. А знать шарп 3.0 и совсем не быть знакомым с ФП попросту невозможно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 17:07
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Что значит нет алгоритма? Sum — это функция которая решат поставленную задачу. fold — это тоже функция которую легко преобразовать в Sum. Так что или алгоритм есть везде, или его нет нигде. Разница между фолдом и сум только в степени универсальности.


Угу, только эта разница кардинальная

VD>Это не значит, что на питоне это делать очень неудобно (как на С писать в ООП-стиле)?


Ну я писал на Си в ООП стиле, оно не так страшно как кажется

VD>Да питон как и C# так себе ФЯ, но базовые фичи в них есть, так что в отличии от С на них можно с легкостью писать в функциональном стиле.


В общем да, но и за частностей и ломает

FR>>И таких человеков полтора на миллион


VD>Ты льстишь. Таких человек конечно же полтора на 100 миллионов, но это ведь если считать от всего населения планеты .




FR>>Все-таки за две недели нереально если до этого не был знаком с функциональщиной.


VD>Совершенно реально. Мастером конечно не станешь, но писать в функциональном стиле будешь весьма уверенно. А знать шарп 3.0 и совсем не быть знакомым с ФП попросту невозможно.


Я уже как-то насмотрелся на С++ программистов не умеющих написать простейший шаблон
Re[11]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 17:16
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

VD>>Ты изучал математику?

VD>>Приведи, плиз, математическое описание алгоритма быстрой сортировки Хора.

ТЗИ>Не понял вопроса. Смотря что подразумевать под "математическим". Собсно, запись этого алгоритма на любом языке программирования будет математическим описанием.


Здорово! И как мы будем отделять мат.описание и программы на корректном языке?

ТЗИ>Только надо определить нотацию.


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

Кстати, как по твоему, в математике есть понятие массива и изменения по месту?

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

ТЗИ>Математика — это всего лишь система формальных соотношений.


Вот именно! А что нужно чтобы "система формальных соотношений" превратилась в алгоритм? Чем нужно ее разбавить/дополнить?

ТЗИ>Задаем понятия, аксиомы, теоремы — и вперед, вот вам математика, хоть с if-else'ами, хоть с функциями высшего порядка. В традиционной математике не принято использовать состояния, а все функции "мгновенны"? Какие проблемы, что мешает ввести состояния? А как же теория конечных автоматов?


Мешает то что 'в традиционной математике не принято использовать состояния, а все функции "мгновенны"' (с) сам знаешь кого.

Давай попробуем отталкиваться от твоего определения.

Для начала опишем алгоритм на словах (по проще):
1. Если у нас пустой список, то сортировка не требуется.
2. Если у нас список состоящий из одного или более элементов то нам нужно:
2.1. Извлечь из списка один элемент.
2.2. Выделить из исходного списка подсписок элементы которого меньше элемента полученного на шаге 2.1.
2.3. Выделить из исходного списка подсписок элементы которого больше или равны элементу полученного на шаге 2.1. (за исключением этого элемента).
2.4. Отсортировать подсписок полученный на шаге 2.2.
2.5. Отсортировать подсписок полученный на шаге 2.3.
2.4. Сформировать список состоящий из списка полученного на шагах 2.4., элемента полученного на шаге 2.1. и подсписка полученного на шаге 2.5. Этот список будет отсортированным списком.

Теперь нам нужно перевести данное описание в описание наиболее близкое к мат.натации.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Expression Tree для описания алгоритмов
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.05.10 17:16
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>Кстати, о Немерле . Если человек знаком с C#, то изучить Немерле можно недели за две не напрягаясь.


FR>>И таких человеков полтора на миллион


VD>Ты льстишь. Таких человек конечно же полтора на 100 миллионов, но это ведь если считать от всего населения планеты .


Эммм, шарперов, которые могут изучить Немерле за 2 недели, всего 100 человек на весь земной шарик?
Re[12]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 17:23
Оценка:
Здравствуйте, FR, Вы писали:

VD>>Что значит нет алгоритма? Sum — это функция которая решат поставленную задачу. fold — это тоже функция которую легко преобразовать в Sum. Так что или алгоритм есть везде, или его нет нигде. Разница между фолдом и сум только в степени универсальности.


FR>Угу, только эта разница кардинальная


Для тебя — возможно. Я ее практически даже не улавливаю.

FR>Ну я писал на Си в ООП стиле, оно не так страшно как кажется


Если бы я это не делал сам, то поверил бы тебе .

VD>>Да питон как и C# так себе ФЯ, но базовые фичи в них есть, так что в отличии от С на них можно с легкостью писать в функциональном стиле.


FR>В общем да, но и за частностей и ломает


Меня тоже. Я подхожу к вопросу очень просто и прагматично — "Зачем писать код используя только ограниченный набор возможностей когда можно использоват их все и при этом еще получать более быстрый код?".

Но многие держатся за какие-то значимые для них догматы. Вот ты, например, пишешь на С++ и ОКамле, а их я точно так же отнес бы к более ограниченным. Так что то на чем писать определяется далеко не только соображениями удобства, можности и т.п. Очень большое влияние оказывают казалось бы совершенно посторонние факторы. В том числе огромное влияние оказывают привычки и устоявшееся мнение.

VD>>Совершенно реально. Мастером конечно не станешь, но писать в функциональном стиле будешь весьма уверенно. А знать шарп 3.0 и совсем не быть знакомым с ФП попросту невозможно.


FR>Я уже как-то насмотрелся на С++ программистов не умеющих написать простейший шаблон


Мы же ведем разговор о людях желающих развиваться и стремящихся изучать новое, а не о сером и унылом былокодере который отсиживает свои положенные 8 часов рабочего времени чтобы уйти пить пиво?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 17:24
Оценка:
Здравствуйте, Курилка, Вы писали:

VD>>Ты льстишь. Таких человек конечно же полтора на 100 миллионов, но это ведь если считать от всего населения планеты .


К>Эммм, шарперов, которые могут изучить Немерле за 2 недели, всего 100 человек на весь земной шарик?


Я говорил о кинетических, а не потенциальных товарищах.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 17:26
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Эммм, шарперов, которые могут изучить Немерле за 2 недели, всего 100 человек на весь земной шарик?


... ох боюсь меня опять не поймут правильно.

Предыдущее сообщение говорит о том, что потенциально конечно любой хороший шарпер освоивших на 4 C# 3.0 легко изучит немерл. Вот только на "потенцию" в первую очередь влияет далеко не наличие такой возможности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 17:31
Оценка:
Ладно, убедил. Хаскель-версия алгоритма действительно приближается к традиционной математической нотации.

Меня единственное, что смущает — а употребляется ли в традиционной математике рекурсия? Я вот не припоминаю, чтобы я видел в какой-нибудь книге по высшей математике рекурсию.

Но все равно, это не та быстрая сортировка обменами, которую реализуют на императивных языках. Такой алгоритм в традиционной нотации вряд ли запишешь.
Re[13]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 17:39
Оценка: -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:


ТЗИ>Меня единственное, что смущает — а употребляется ли в традиционной математике рекурсия? Я вот не припоминаю, чтобы я видел в какой-нибудь книге по высшей математике рекурсию.


http://ru.wikipedia.org/wiki/Рекурсивная_функция_(теория_вычислимости)
Re[8]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 17.05.10 17:47
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>если говорить о Прологовском варианте (кстати, не пойму почему язык так не заслужено забыт!).


N>>Потому что сейчас есть Curry.


VD>А ты сам то это чудо используешь?

Это не аргумент если вопрос задан в теоретической плоскости. В этом смысле очень даже решает проблему. Здесь и алгоритмов не надо писать. Этим занимается компьютер. Беда только в эффективности. Думаю если объединить не две (как в carry) а три парадигмы (включая императивную) хорошо получится..
Re[7]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 17.05.10 17:54
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Только не надо совсем в бред впадать. Для человека, не знающего Хаскель, этот кусочек кода представляет собой абракадабру. Только человек с совсем уж искаженным программированием мышлением может заявить, что он по понятности такой же, как псевдокод.


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


ТЗИ>Как можно взять нормальный кусок английского текста и сказать, что он по понятности ровно такой же, как что-то вроде
lidfulj3*)(##*&kd*97
(это валидный код на моем собственном языке программирования FuckTheMotherFuckers++, который я придумал пять минут назад, и я этот кусок кода, заметьте, прекрасно понимаю, но никогда не скажу, что он по понятности ничем не уступает английскому тексту, поскольку у меня еще не настолько искаженное программированием сознание).


ТЗИ>На этот пост можно не отвечать, так как дальше обсуждать такой очевидный вопрос не вижу смысла.

Если б этот вопрос был так очевиден. Увы, каждый тянет в смысле понятности в то к чему привык. Очень жаль что у програмистов не выработалсья единый подход именно в смысле восприятия языка. Собственно этой проблемой занимаюсь, и с удовольствием пообщался бы. Но пока встречаю только негатив. Сори..Не найду как плюсик поставить.. Но, считай поставил
Re[8]: Expression Tree для описания алгоритмов
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 17.05.10 18:05
Оценка:
Здравствуйте, VladD2, Вы писали:

_>>Ведь F# — функциональный язык, а так как он для .net то любой код написаный на нем легко дизассемблировать на C#.


VD>Ну, так описывай свои алгоритмы на IL или x86-ом ассемблере. За чем дело встало?


VD>Принципиально они одинаково мощны. Ведь все они полны по Тюрингу.


Это расхожее заблуждение. В большинстве языков размер указателя — константа, а значит они оперируют конечной памятью, а не бесконечной лентой, как машина Тьюринга. И это не практическое ограничение железа, это именно теоретическое ограничение языка.
Re[10]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 17.05.10 18:09
Оценка: 1 (1) +1 -1
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Тролль зеленый и толстый, Вы писали:


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


ТЗИ>>Если человек изучал математику и не изучал программирование, ему оба варианта будут непонятны.

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

ТЗИ>>А вот нормальное описание на естественном языке он с легкостью воспримет.

G>Только доказать что нормальное "описание на естественном языке" делает то что надо — далеко нетривиальная задача.

ТЗИ>>И вообще, хватит отождествлять математику и функциональное программирование. А императивное программирование — это что ли не математика?

G>Императивное программирование опирается на изменяемое состояние, которое не имеет никакого отношения к математике.

ТЗИ>>Математика — это вообще всего лишь набор формальных соотношений. То, как в математике принято записывать формулы — всего лишь традиция.

G>Программа на том же хаскеле тоже лишь набор формальных (проверяемых компилятором) отношений.

ТЗИ>>То, что функциональное программирование похоже на запись формул в математике, не делает его ближе к математике, чем императивное или какое-либо другое программирование.

G>Доказывать такие утверждения надо.

G>А вообще математический аппарат (типа индукции) очень хорошо подходит для рассуждения над функциональными программами. А вот императивные программы таким похвастаться не могут. К чему бы это?

Мне кажется что понимание и не понимание (или легкость восприятия) зависит не только от парадигмы. Вряд ли здесь общаются люди которым бесконечно трудно воспринять какую-то математическую мысль или суть алгоритмя. Да и с парадигмами проблем нет. Считаю проблема в отсутствии единого подхода к языкам. Разработчики легко ставят где хотят что хотят и получается язык перегружен условностями, через лес которых приходится пробираться. Назвать такую ситуацию нормальной сложно. Отсюда и споры.
В качестве примера могу предложить самую легкую карточную игру в дурака. Но правила поменяем. Например, шестерка бъет туза, даму- семерка, вальта-9, а короля-10-ка.. И простая игра превратится в шараду. Может кому и будет интересно, но суть игры не измениться. Просто мозговздрочь. Именно она и создает проблемы.
Re[13]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 18:20
Оценка: -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Ладно, убедил. Хаскель-версия алгоритма действительно приближается к традиционной математической нотации.



ТЗИ>Меня единственное, что смущает — а употребляется ли в традиционной математике рекурсия? Я вот не припоминаю, чтобы я видел в какой-нибудь книге по высшей математике рекурсию.


То что на просторах интернетов не часто встретишь мат.определения с рекурсией еще не значит, что рекусрия не математический термин. Насколько я помню о рекурсии (или как ее иногда называют в математике рекурентности) я услышал как раз на уроках математики.

Собственно простой запрос к гуглю выдает вот такой вот список. Он говорит сам за себя.

ТЗИ>Но все равно, это не та быстрая сортировка обменами, которую реализуют на императивных языках.


100% не та. С этим никто не спорит. В книгах по программированию обычно описывается алгоритм сортировки Хора для сортировки данных в массиве "по месту", т.е. без занятия дополнительной памяти. Более того, обычно приводятся не исходный алгоритм, а модифицированный (например, с переходом на сортировку вставками в маленьких подмассивах).

Но тут то говорилось об описании сути алгоритма в близкой к математической нотации. И тут хаскелевская (немерловская или любая другая функциональная) реализация очень близка к тому самому мат.описанию. Причем на практике она плоохо не применима, так как весьма не эффективна, но так как важна не практическая, а теоретическая (математическая) сторона вопроса, то функциональная реализация отлично подходит в данном случае.

ТЗИ>Такой алгоритм в традиционной нотации вряд ли запишешь.


Немного не понял данного высказывания. Который "такой"? И в что есть традиционная нотация?
В математике нет понятия массива (как структуры данных), модификации ячеек памяти и т.п.) по этому но как ты сам правильно заметил реальные работы трактуют математику расширенно.

ЗЫ

Кстати, я нахожу что записанный математически алгоритм куда менее формален и точен чем реализация на реальном языке или даже описание на словах, так как в нем слишком много условностей, недосказанностей, опущений (вроде все той же модификации структур данных по месту) и т.п. По этом лично я не люблю матетатические описания алгоритмов. Плюс у кода есть огромное приемущество, по нему можно "ходить" отладчиком. Это порой позволяет понять суть алгоритмов в сто раз лучше нежели формальное описание. Но когда есть и то, и другое и третье (т.е. формальное описание, описание на естественном языке и реализация на ЯП) — это несомненно замечательно.

Ну, а эсперанто для языков программирования — это все же утопия.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 18:26
Оценка:
Здравствуйте, batu, Вы писали:

N>>>Потому что сейчас есть Curry.


VD>>А ты сам то это чудо используешь?


B>Это не аргумент если вопрос задан в теоретической плоскости.


А я говорил, что это аргумент?
Это вопрос!

B>В этом смысле очень даже решает проблему. Здесь и алгоритмов не надо писать. Этим занимается компьютер. Беда только в эффективности. Думаю если объединить не две (как в carry) а три парадигмы (включая императивную) хорошо получится..


У меня были мысли включить аналог системы вывода правил пролога в Немерле в виде макросов (или даже в ядро второй версии языка). Но это не малый объем работы. Плюс нужны знания о том как реализовать алгоритм вывода эффективно, так как простой перебор с откатами не самое лучшее решение с точки зрения эффективности. Как я понимаю в реальных компиляторах и интерпретаторах Пролога используется море эвристик и прочих оптимизаций.

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

Так что если есть желающие, милости просим!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 18:28
Оценка:
Здравствуйте, D. Mon, Вы писали:

VD>>Принципиально они одинаково мощны. Ведь все они полны по Тюрингу.


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


А вот это уже бессмысленная софистика.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 18:36
Оценка:
Здравствуйте, D. Mon, Вы писали:

VD>>Принципиально они одинаково мощны. Ведь все они полны по Тюрингу.


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


Вообще-то аналогом ленты тут будет не только оперативная память, но и внешние носители и ввод-вывод, которые можно потенциально бесконечно наращивать
Re[14]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 18:44
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>1. Не является описанием алгоритма Хоара.

Это одна и есть вариация метода быстрой сортировки, которая была предложена Хоаром. Вот его статья в том виде, в котором она появилась в 1962. Там алгоритм описан словами

VD>2. Не является математическим описанием, а является описанием на каком-то суржике с преобладанием русского языка.

А типа математическое описание только там, где нет слов? Много лет алгоритмы описывались словами, а в случае необходимости формального описания приводился исходный текст программы. Чем это не математика? У тебя какое-то совсем узвое понимание


VD>Так вот, описать алгоритм Хора средствами одной лишь математики практически невозможно. А если постораться это сделать, то у тебя получится запись очень близкая к записи получаемой на функциональных языках:

VD>
VD>

Нигде такой изврат не встречал. Алгоритмы очень часто встречаются в математических книгах. Для их описания часто используется словесная форма, используются (использовались) блок-схемы-алгоритмы, используется псевдокод. Это можно найти довольно часто. А такого я не видел, может подкинешь ссылоку? Более того, это не алгоритм Хоара, по той причине, что алгоритм Хоара вполняет сортировку по месту. Все его формулы, которые он приводил в своей статье, расчитаны на этот случай. Ты себя просто обманываешь


VD>Это практически тоже самое что мы можем получить на функциональных языках (вариант на Немерле):

VD>
VD>def quickSort(lst)
VD>{
VD>  | [] => [];
VD>  | x :: xs  => qs($[ y | y in xs, y < x ]) + [x] + qs($[y | y in xs, y >= x]);
VD>}
VD>


Я бы не стал осквернять имя Хоара такой реализацией. Скорее всего это о-очень ме-е-едленная сортировка Влада
Re[14]: Expression Tree для описания алгоритмов
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 17.05.10 18:56
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Не, ну, я же сказал — если показать не чего, то проходи мимо.


VD>То что ты показал:

VD>1. Не является описанием алгоритма Хоара.
VD>2. Не является математическим описанием, а является описанием на каком-то суржике с преобладанием русского языка.

VD>>...


VD>Тут уже больше математических символов, но опять же слишком много английского и опять же это не алгоритм Хора.



Интересно, что в твоём понимании означает термин "математическое описание"?
Означает ли, что высказывание должно состоять исключительно из цифр, литинских и греческих букв, а также специальных символов-сокращений (=, <, > и т.д.)?
Или описание является математическим, если оно логически непротиворечиво, а также не противоречит принятому набору аксиом?

Например, гипотеза Пуанкаре сформулирована на чистейшем русском: "Всякое односвязное компактное трёхмерное многообразие без края гомеоморфно трёхмерной сфере". Данную формулировку можно называть вполне "математичной"?
Re[10]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 17.05.10 18:59
Оценка:
Здравствуйте, VladD2, Вы писали:

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


N>>>>Потому что сейчас есть Curry.


VD>>>А ты сам то это чудо используешь?


B>>Это не аргумент если вопрос задан в теоретической плоскости.


VD>А я говорил, что это аргумент?

VD>Это вопрос!

B>>В этом смысле очень даже решает проблему. Здесь и алгоритмов не надо писать. Этим занимается компьютер. Беда только в эффективности. Думаю если объединить не две (как в carry) а три парадигмы (включая императивную) хорошо получится..


VD>У меня были мысли включить аналог системы вывода правил пролога в Немерле в виде макросов (или даже в ядро второй версии языка). Но это не малый объем работы. Плюс нужны знания о том как реализовать алгоритм вывода эффективно, так как простой перебор с откатами не самое лучшее решение с точки зрения эффективности. Как я понимаю в реальных компиляторах и интерпретаторах Пролога используется море эвристик и прочих оптимизаций.


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


VD>Так что если есть желающие, милости просим!

А в чем может заключаться поддержка? У меня язык уже есть. Что касается логической части, то там совсем не просто, но решаемо. Принцип такой что документ (у меня не обязательно это программа) погружается в среду, частью среды являются утверждения. Если задано целевое утверждение (т.е. то что подлежит логическому разбору) то, на основе среды осуществляется интерпретация. Вместо откатов принята парадигма двойственного представления объекта. "каждый объект кроме императивной части может содержать логмческую составляющую". И если не разрешима логическая часть, то можно получить результат императивно. Например, функция Next может быть представленка как логическим выражением, так и операторами. Вообщем если интересно, то раздел 5 и 5.1. здесь
Могу тоже кое-кого подключить.. Но для полной реализации идеи у меня сил не достаточно.
й
Re[14]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 19:10
Оценка: +1
VD>То что на просторах интернетов не часто встретишь мат.определения с рекурсией еще не значит, что рекусрия не математический термин. Насколько я помню о рекурсии (или как ее иногда называют в математике рекурентности) я услышал как раз на уроках математики.

На каких просторах интернетов? Это типа ты меня пытаешься так унизить? Я за свою жизнь прочитал много книг по математике и не припоминаю ни одного упоминания рекурсии. Ну давайте возьмем толстый учебник по высшей математике и найдем там рекурсию. Я не говорю, что рекурсии не существует или она не используется в математике, просто мне кажется, что рекурсия как-то чаще упоминается в связи с computer science.

Да, а по поводу того, что код на Хаскеле приближается к математической нотации — из этого не следует, что он является более понятным, чем запись на человеческом языке.

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

Если взять какую-нибудь не очень сложную программу и обфусцировать ее так, как делают математики со своими выкладками — обозвать все переменные и функции одной буквой, латинской или греческой, либо фамилиями авторов этих функций, например, def Pukin() — функция Пукина, def Sigma() — функция сигма, то восприятие этой программы станет действительно сложным, и ее автор сможет гордо сказать: "Да, теперь эта программа понятна лишь немногим избранным, умеющим как следует напрягать свой мозг, настоящим математикам", хотя на самом деле эта программа занимается всего лишь расчетом ведомости на холодильники.
Re[10]: Expression Tree для описания алгоритмов
От: Silver_s Ниоткуда  
Дата: 17.05.10 19:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>У меня были мысли включить аналог системы вывода правил пролога в Немерле в виде макросов (или даже в ядро второй версии языка).


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


Может я подзабыл что такое Пролог. Но там вроде основная фишка решение уравнений на булевой алгебре (логический вывод). И к этому приделали какое-то уродство похожее на язык (костыли).
А зачем вобще для этого синтаксис нужен? Разве писатели найдутся, которые эти правила будут вбивать целыми днями вручную? Да и вобще зачем Пролог нужен?
Ну сделали логический вывод, хорошо, но должно быть оформлено в виде CodeDOM без всяких лишних костылей, т.е. просто в виде реюзабельной библиотечки, лучше для .NET. А вместо костылей есть инструменты получше.

Ну есть такая штука "математическое программирование", тоже системы алгебраических уравнений мучают. Не делать же из этого ЯП со своими костылями(чтоб на них и алгоритм сортировки можно было сделать, если помучаться, на всякий случай).
Re[10]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 19:42
Оценка:
ТЗИ>>Похоже, у нас разное представление об алгоритме быстрой сортировки.
G>Ага, у меня — об алгоритме, а у тебя — о реализации.

Эта "реализация" — часть алгоритма. Ты просто выкидываешь из алгоритма кусок, который мешает его реализации на функциональных языках.
Re[11]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 19:52
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>>>Похоже, у нас разное представление об алгоритме быстрой сортировки.

G>>Ага, у меня — об алгоритме, а у тебя — о реализации.

ТЗИ>Эта "реализация" — часть алгоритма. Ты просто выкидываешь из алгоритма кусок, который мешает его реализации на функциональных языках.

я уже приводил кусок кода из английской википедии где обозначен другой алгоритм разбиения. И ниче — тоже быстрая сортировка.
Re[15]: Expression Tree для описания алгоритмов
От: BulatZiganshin  
Дата: 17.05.10 20:00
Оценка: +1 -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

VD>>То что на просторах интернетов не часто встретишь мат.определения с рекурсией еще не значит, что рекусрия не математический термин. Насколько я помню о рекурсии (или как ее иногда называют в математике рекурентности) я услышал как раз на уроках математики.


ТЗИ>На каких просторах интернетов? Это типа ты меня пытаешься так унизить? Я за свою жизнь прочитал много книг по математике и не припоминаю ни одного упоминания рекурсии.


а рекуррентных соотношений?
Люди, я люблю вас! Будьте бдительны!!!
Re[16]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 20:02
Оценка:
BZ>а рекуррентных соотношений?

Припоминаю только в математической статистике при определении факториала.
Re[12]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 20:03
Оценка:
G>я уже приводил кусок кода из английской википедии где обозначен другой алгоритм разбиения. И ниче — тоже быстрая сортировка.

Это какой-то нехороший человек код с Хаскеля записал словами. В Википедии пишет, кто попало.
Re[13]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 20:04
Оценка: :))
Здравствуйте, Тролль зеленый и толстый, Вы писали:

G>>я уже приводил кусок кода из английской википедии где обозначен другой алгоритм разбиения. И ниче — тоже быстрая сортировка.


ТЗИ>Это какой-то нехороший человек код с Хаскеля записал словами. В Википедии пишет, кто попало.


Всемирный заговор хаскельщиков
Re[17]: Expression Tree для описания алгоритмов
От: BulatZiganshin  
Дата: 17.05.10 20:07
Оценка: +1 -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

BZ>>а рекуррентных соотношений?


ТЗИ>Припоминаю только в математической статистике при определении факториала.


а определение самого целого числа?

но вообще вы что-то совсем уж ступили, неужто эти a(n+1) на каждой странице можно позабыть?
Люди, я люблю вас! Будьте бдительны!!!
Re[14]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 20:09
Оценка:
FR>Нормальный человеческий язык плохо подходит для такой узкоспециализированной вещи как описание алгоритмов,

Согласен.

FR>иначе математики не придумали бы свои закорючки.


Можно подумать, закорючки больше подходят.
Re[17]: Expression Tree для описания алгоритмов
От: BulatZiganshin  
Дата: 17.05.10 20:09
Оценка: +1 -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

BZ>>а рекуррентных соотношений?


ТЗИ>Припоминаю только в математической статистике при определении факториала.


и матиндукцию в док-вах вы тоже никогда не встречали?
Люди, я люблю вас! Будьте бдительны!!!
Re[17]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 20:10
Оценка: +1 -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

BZ>>а рекуррентных соотношений?


ТЗИ>Припоминаю только в математической статистике при определении факториала.


Наибольший общий делитель, наименьшее общее кратное, вычисление детерминанта (определителя) матрицы через разложение по строке...
это навскидку вспомнил.

Еще что-то было в линейной алгебре и дискретной математике.

Вообще доказательство по индукции применимо именно к рекурентным соотношениям.
Re[14]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 20:15
Оценка: 2 (1)
Здравствуйте, VladD2, Вы писали:

VD>2. Не является математическим описанием, а является описанием на каком-то суржике с преобладанием русского языка.


Мне кажется, стоит прояснить одну вещь. Математика это не математическая символика. Математика это скорее способ строить умозаключения. Основания математики уходит в математическую логику. Именно там дается формальное определение аксиом, теорем и доказательств. На этом пути можно развивать абсолюто формальным образом математические теории, сейчас даже есть проект, который строит формальные доказательства всех теорем. Строго говоря, именно такой процесс построения форманых теорий и есть математика. Этих среств вполне достатоно для того, чтобы определить машину Тьюринга, язык Паскаль, C#, Haskell, Nemerle, ассемблер, кучу других средств задания алгоритмов, шахматы и много-много чего. Далеко на этом пути продвинулся господин Бурбаки.

Однако на практике нам не нужны формальные доказательства. Достаточно убедительных свидетельств того, что это формальное доказательство можно получить. Конечно, это может привести к некоторым конфликтам, но тогда доказательство детализируется до некоторого уровня, на котором обе стороны придут к конценсусу.

К чему это все? Словесное описание алгоритма с практической точки зрения может быть формальным и математичным. Это достигается в том случае, если у читателей не возникнет никаких проблем с формализацией этого описания. На практике это ознаает, что читатель сможет реализовать этот алгоритм на любимом языке программирования. Или выполнить шаги алгоритма вручную. Более того, словесное описание алгоритмов очень распространено в математической литературе. Алгоритм Эвклида, деление многочленов с остатком, взятие интегралов от рациональных функций, решение задачи линейного программирования, алгоритм Гаусса---это все примеры алгоритмов в математике. Да, их можно формализовать с большей детализацей. Но это относится к любому математиескому тексту. В пределе получается книга, состоящая только из аксиом, теорем и формальных доказательств. Вопрос в практическом смысле оного.

Для примера, ниже приводится строгий формальный вывод соотношения a=a в формальной арифметике. Но кому нужна такая детализация???

Re[18]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 20:21
Оценка: -1
Вы все такие умные, я от вас хренею.

Впрочем, тут на форуме все такие.
Re[18]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 20:21
Оценка: -1
Вы тоже очень умный, успокойтесь.

А насколько ваш лучший в мире архиватор популярен?
Re[18]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 20:24
Оценка:
Я, вообще-то, имел в виду употребление рекурсии в математической нотации.
Re[18]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 20:27
Оценка:
Кстати, а вы простой C# developer или team lead? Что разрабатываете, если не секрет?
Re[19]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 20:29
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Кстати, а вы простой C# developer или team lead? Что разрабатываете, если не секрет?


Сейчас я ИП Разрабатываю соответственно ВСЕ, за что платят деньги.
Re[18]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 20:37
Оценка: :)))
Вы думаете, я знаю математику хуже вас?

Задолбало. Привязываются к каждому слову, постоянно оскорбляют.

Все такие из себя суперумные, всезнающие, крутые.

Тошнит от вас от всех.
Re[20]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 21:42
Оценка:
G>Сейчас я ИП Разрабатываю соответственно ВСЕ, за что платят деньги.

В смысле, фрилансер?
Re[18]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 21:53
Оценка:
Простите, вы считаете, что любое n+1 подразумевает рекурсию? А в доказательстве по индукции где рекурсия? Опять n+1?
Re[18]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 21:54
Оценка:
BZ>и матиндукцию в док-вах вы тоже никогда не встречали?

Где вы там нашли рекурсию?
Re[18]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 22:03
Оценка:
G>Наибольший общий делитель, наименьшее общее кратное, вычисление детерминанта (определителя) матрицы через разложение по строке...
G>это навскидку вспомнил.

Я не припоминаю, чтоб нас этому учили в рекуррентной форме.

G>Вообще доказательство по индукции применимо именно к рекурентным соотношениям.


Это вы сами придумали. Там речь идет только об n+1.
Re[11]: Expression Tree для описания алгоритмов
От: FR  
Дата: 18.05.10 03:04
Оценка:
Здравствуйте, Silver_s, Вы писали:

S_> Может я подзабыл что такое Пролог. Но там вроде основная фишка решение уравнений на булевой алгебре (логический вывод). И к этому приделали какое-то уродство похожее на язык (костыли).


Тогда остальные языки уже не просто уродство а полное дерьмо
Как язык пролог один из самых декларативных и читабельных, и вообще ближе к человеческому мышлению чем
императивные и функциональные языки. Но при этом страшно неэффективен кроме очень узкой ниши.
Re[15]: Expression Tree для описания алгоритмов
От: FR  
Дата: 18.05.10 03:06
Оценка:
Здравствуйте, Nuzhny, Вы писали:


N>Например, гипотеза Пуанкаре сформулирована на чистейшем русском: "Всякое односвязное компактное трёхмерное многообразие без края гомеоморфно трёхмерной сфере".


Re[19]: Expression Tree для описания алгоритмов
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 18.05.10 04:47
Оценка: -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

BZ>>и матиндукцию в док-вах вы тоже никогда не встречали?


ТЗИ>Где вы там нашли рекурсию?


С точки зрения матлогики, рекурсия и индукция — разные способы описания одного и того же.
См., например, обобщение математической индукции — структурную индукцию:
http://en.wikipedia.org/wiki/Structural_induction
Re[12]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 18.05.10 06:09
Оценка:
Здравствуйте, FR, Вы писали:

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


S_>> Может я подзабыл что такое Пролог. Но там вроде основная фишка решение уравнений на булевой алгебре (логический вывод). И к этому приделали какое-то уродство похожее на язык (костыли).


FR>Тогда остальные языки уже не просто уродство а полное дерьмо

FR>Как язык пролог один из самых декларативных и читабельных, и вообще ближе к человеческому мышлению чем
FR>императивные и функциональные языки. Но при этом страшно неэффективен кроме очень узкой ниши.
Согласен. Только пока не эффективен. А дальше жизнь покажет
Re[19]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.05.10 06:09
Оценка: -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

G>>Наибольший общий делитель, наименьшее общее кратное, вычисление детерминанта (определителя) матрицы через разложение по строке...

G>>это навскидку вспомнил.

ТЗИ>Я не припоминаю, чтоб нас этому учили в рекуррентной форме.

Определения обычно не в рекурентной форме. А вычисления в рекурентной.

G>>Вообще доказательство по индукции применимо именно к рекурентным соотношениям.

ТЗИ>Это вы сами придумали. Там речь идет только об n+1.

Да ну?
Вспоминаем как доказывать по индукции:
1)Определяем базовый (или несколько базовых случаев) при фиксированном N
2)Предполагаем что утверждение выполняется для N (формальность)
3)Доказываем для N+k, где k — константа и обычно равна 1

Кстати, ты будешь удивлен, но в хаскеле есть паттерн n+k и можно писать функции так

//Большими буквами обозначены константы
f N0 = expr0
f N1 = expr1
...
f (n+K) = expr(f(n))


Так что там насчет далекости хаскеля от математики?
Re[21]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.05.10 06:11
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

G>>Сейчас я ИП Разрабатываю соответственно ВСЕ, за что платят деньги.


ТЗИ>В смысле, фрилансер?


В смысле руководитель маааленькой конторы, занимающейся заказной разработкой.
В основном менеджментом занимаюсь.
Re[20]: Expression Tree для описания алгоритмов
От: BulatZiganshin  
Дата: 18.05.10 07:03
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Кстати, ты будешь удивлен, но в хаскеле есть паттерн n+k и можно писать функции так


G>Так что там насчет далекости хаскеля от математики?


ты будешь смеяться, но хаскель 2010 от математики таки отдалился
Люди, я люблю вас! Будьте бдительны!!!
Re[21]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.05.10 07:11
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


G>>Кстати, ты будешь удивлен, но в хаскеле есть паттерн n+k и можно писать функции так


G>>Так что там насчет далекости хаскеля от математики?


BZ>ты будешь смеяться, но хаскель 2010 от математики таки отдалился


Ну да, там убрали паттерн (n+k) мотивируя это тем, что оператор (+) может быть переопределен и паттерн не может это учитывать.
Re[15]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.05.10 07:25
Оценка:
Здравствуйте, Mystic, Вы писали:

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


VD>>1. Не является описанием алгоритма Хоара.

M>Это одна и есть вариация метода быстрой сортировки, которая была предложена Хоаром. Вот его статья в том виде, в котором она появилась в 1962.

Ага, только ты процетировал даже не хоровский алгоритм. Посмотри внимательно, там идет речь об сортировке вставками (видимо как оптимизация).

M>Там алгоритм описан словами


Ага. Но не кнутовскими.

VD>>2. Не является математическим описанием, а является описанием на каком-то суржике с преобладанием русского языка.

M>А типа математическое описание только там, где нет слов?

Если 90% описания — это слова, то математики в нем чуть больше чем полностью нет.

M> Много лет алгоритмы описывались словами, а в случае необходимости формального описания приводился исходный текст программы. Чем это не математика? У тебя какое-то совсем узвое понимание


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

VD>>Так вот, описать алгоритм Хора средствами одной лишь математики практически невозможно. А если постораться это сделать, то у тебя получится запись очень близкая к записи получаемой на функциональных языках:

VD>>
VD>>

M>Нигде такой изврат не встречал.


Это говорит исключительно о тебе.

M> Алгоритмы очень часто встречаются в математических книгах. Для их описания часто используется словесная форма, используются (использовались) блок-схемы-алгоритмы, используется псевдокод.


Ага. Только вот псевдокод — это миф. Фактически используется выдуманный язык. Иногда даже (как в книгах Кнута) используется выдуманный ассемблер выдуманной машины.

M> Это можно найти довольно часто. А такого я не видел, может подкинешь ссылоку?


Можешь зайти тайти самоучитель по любому ФЯ. Там почти наверняка будет подобное описание.

M> Более того, это не алгоритм Хоара, по той причине, что алгоритм Хоара вполняет сортировку по месту.


Это алгоритм Хора. Алгоритм вообще не знает что такое место. Алгоритм — это абстракция.

M>Я бы не стал осквернять имя Хоара такой реализацией.


Ты бы лучше о своем имени думал. Несешь чушь с уверенностью достойной лучше применения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 18.05.10 09:03
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

VD>Ага, только ты процетировал даже не хоровский алгоритм. Посмотри внимательно, там идет речь об сортировке вставками (видимо как оптимизация).


Да, оптимизация на последнем этапе. Хоар тоже об этом упоминал в своей работе.

VD>>>2. Не является математическим описанием, а является описанием на каком-то суржике с преобладанием русского языка.

M>>А типа математическое описание только там, где нет слов?
VD>Если 90% описания — это слова, то математики в нем чуть больше чем полностью нет.
VD>Дык я и говорил, что математика плохо пригодна для описания алгоритмов. Потому их словами и описывают. Причем если вообще обойтись без мат.символов, то станет только понятнее, а вот обратное не верно.

Описать алгоритмы можно, как можно описать машину Тьюринга. Можно ввести свои обозначения, описать любой язык программирования. Вопрос другой: а смысл? Часто словесного описания алгоритма более чем достаточно. Общепринятой формальной системы нет, и смысла в ней тоже нет. Ничто не мешает ее построить в соответствии с аксиоматикой, как те же конечные автоматы. Только это будет напрасный перевод бумаги: описание такой системы будет объемно и тривиально по содержанию Там гду нужна такая формализация появились языки программирования. Тем не менее, иногда они это чрезмерная детализация, которая не нужна.


M>> Алгоритмы очень часто встречаются в математических книгах. Для их описания часто используется словесная форма, используются (использовались) блок-схемы-алгоритмы, используется псевдокод.

VD>Ага. Только вот псевдокод — это миф. Фактически используется выдуманный язык. Иногда даже (как в книгах Кнута) используется выдуманный ассемблер выдуманной машины.
А в математике все выдумано, если на то пошло. Математика это плох воображения: если выдуманная система аксиом, в которой мы и работаем. В этой системе аксиом можно описать реальный ассемблер, а можно выдуманный. Можно описать Nemerle, C# и т. п.


M>> Это можно найти довольно часто. А такого я не видел, может подкинешь ссылоку?

VD>Можешь зайти найти самоучитель по любому ФЯ. Там почти наверняка будет подобное описание.
Там обычно идет исходник на этом ФЯ, не более того. Ибо возникает естественный вопрос: зачем математической символикой дублировать этот ФЯ? Любой язык программирования по сути может рассматриваться как математическая символика.


M>> Более того, это не алгоритм Хоара, по той причине, что алгоритм Хоара вполняет сортировку по месту.

VD>Это алгоритм Хора. Алгоритм вообще не знает что такое место. Алгоритм — это абстракция.
Еще как знает. Вся дисциплина "анализ алгоритмов" о том, как получать характеристики алгоритма, такие как затраты памяти, скорость выполнения, количество тех или иных операций и т. п. Если брать за оригинал статью самого Хоара, то все его формулы из нее ну никак не относятся к тому варианту, что ты привел. Например, там оценивается количество перестановок, которые выполняет алгоритм. Где они у тебя? Нет перестановок, значит это не Хоар, а другой алгоритм
Re[8]: Expression Tree для описания алгоритмов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 18.05.10 09:25
Оценка:
Здравствуйте, VladD2, Вы писали:

N>>Потому что сейчас есть Curry.


VD>А ты сам то это чудо используешь?


На работе на нашем проекте используется только C# и VB.NET, так что нет.
Но у меня есть одна задачка, которой я собираюсь заняться в свободное время, и я как раз думал приспособить туда Curry.
Re[12]: Expression Tree для описания алгоритмов
От: Silver_s Ниоткуда  
Дата: 18.05.10 10:25
Оценка:
Здравствуйте, FR, Вы писали:

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

FR>императивные и функциональные языки. Но при этом страшно неэффективен кроме очень узкой ниши.

Может эти прелести надо не Прологу приписывать, а списку правил т.е. списку импликаций?
Списки импликаций действительно вещь очень читабельная, хотя и недостаточная для создания всех промышленных систем.
Только вот стоит ли из этого пытаться делать самодостаточный язык. Если и возможно целиком на Прологе реализовать ERP или CAD систему, ве на Прологе от графики до логики, то читабельность будет просто ужасная.
А списки правил вида: если будет дождь -> взять зонт; если есть тучи ->будет дожь, оно конечно читабельнее чем код на C++ какой нибудь системы 3D моделирования.
Re[7]: Expression Tree для описания алгоритмов
От: vdimas Россия  
Дата: 18.05.10 19:44
Оценка:
Здравствуйте, nikov, Вы писали:


VD>>если говорить о Прологовском варианте (кстати, не пойму почему язык так не заслужено забыт!).


N>Потому что сейчас есть Curry.


Что-то я не нашел в туториале программирования в ограничениях и поиск решения. Наверно, он не совсем аналог Пролога.
Re[20]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 18.05.10 21:22
Оценка:
DM>См., например, обобщение математической индукции — структурную индукцию:
DM>http://en.wikipedia.org/wiki/Structural_induction

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

В самой же математической индукции я ничего рекурсивного не вижу.
Re[20]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 18.05.10 21:28
Оценка:
ТЗИ>>Я не припоминаю, чтоб нас этому учили в рекуррентной форме.
G>Определения обычно не в рекурентной форме. А вычисления в рекурентной.

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

G>Да ну?

G>Вспоминаем как доказывать по индукции:
G>1)Определяем базовый (или несколько базовых случаев) при фиксированном N
G>2)Предполагаем что утверждение выполняется для N (формальность)
G>3)Доказываем для N+k, где k — константа и обычно равна 1

Ну вспоминаем. Че-то вы не то написали.

Для индукции нужно доказать истинность двух утверждений:

1) Истинность F(n),
2) Истинность импликации F(n) => F(n + k),

Тогда получаем истинность для всех F(n + k * i).

Вопрос: где тут рекурсия?

G>Так что там насчет далекости хаскеля от математики?


Я про далекость Хаскеля от математики не говорил.
Re[8]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 18.05.10 22:37
Оценка:
N>Можно написать и с деструктивным in-place обновлением (здесь, здесь), но будет уже не так коротко и понятно.

От. От это оно. Чего-ж спорить-то до усрачки, если сами все прекрасно понимаете?

Вот это он и есть самый квиксорт, о котором писал Хоар.

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

И, главное, какой "понятный" синтаксис! Какая легкость восприятия! Мммм... Переменные обозначены одной буквой, конечно ж, это от высокого функционального стиля. А функция processArray как-то слишком вульгарно-понятно называется — это фи, императивщина, надо было j или sigma.

import Control.Monad (when)
import Control.Monad.ST
import Data.Array.ST
import Data.Array.IArray
import Data.Array.MArray
 
qsort :: (IArray a e, Ix i, Enum i, Ord e) => a i e -> a i e
qsort arr = processArray quickSort arr
 
processArray :: (IArray a e, IArray b e, Ix i)
             => (forall s. (STArray s) i e -> ST s ()) -> a i e -> b i e
processArray f (arr :: a i e) = runST $ do
    arr' <- thaw arr :: ST s (STArray s i e)
    f arr'
    unsafeFreeze arr'
 
quickSort :: (MArray a e m, Ix i, Enum i, Ord e) => a i e -> m ()
quickSort arr = qsort' =<< getBounds arr
  where
    qsort' (lo, hi) | lo >= hi  = return ()
                    | otherwise = do
        p <- readArray arr hi
        l <- mainLoop p lo hi
        swap l hi
        qsort' (lo, pred l)
        qsort' (succ l, hi)
 
    mainLoop p l h  | l >= h    = return l
                    | otherwise = do
        l' <- doTil (\l' b -> l' < h  && b <= p) succ l
        h' <- doTil (\h' b -> h' > l' && b >= p) pred h
        when (l' < h') $ do
            swap l' h'
        mainLoop p l' h'
 
    doTil p op ix = do
        b <- readArray arr ix
        if p ix b then doTil p op (op ix) else return ix
 
    swap xi yi = do
        x <- readArray arr xi
        readArray arr yi >>= writeArray arr xi
        writeArray arr yi x
Re[21]: Expression Tree для описания алгоритмов
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 19.05.10 05:11
Оценка: +1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

DM>>См., например, обобщение математической индукции — структурную индукцию:

DM>>http://en.wikipedia.org/wiki/Structural_induction

ТЗИ>Нам в курсе математики структурную индукцию не давали. Я так понял, что структурная индукция — есть обобщение математической индукции на рекурсивные структуры данных, такие как деревья и списки.

ТЗИ>В самой же математической индукции я ничего рекурсивного не вижу.

Осталось только понять, почему это обобщение: потому что натуральные числа — это частный случай рекурсивной структуры:
Nat = Zero | Succ Nat
(см. http://en.wikipedia.org/wiki/Peano_axioms )
В матиндукции из школьной программы мы доказываем истинность некого предиката Р(n) для всех натуральных n.
Зная, что n — это либо 0, либо k+1 некоторого натурального k, P превращается в рекурсивную функцию c двумя ветками: P(0) и P(n), выраженную через P(n-1). И наоборот — рекурсивную функцию над натуральными числами в приведенной форме можно рассматривать как индуктивное доказательство некоторого утверждения, справедливого для всех натуральных чисел.

Надеюсь, про прямую связь между функциями и доказательствами, а также типами и утверждениями вы знаете (изоморфизм Карри-Говарда).
http://thedeemon.livejournal.com/15889.html
Re[21]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.10 05:58
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>>>Я не припоминаю, чтоб нас этому учили в рекуррентной форме.

G>>Определения обычно не в рекурентной форме. А вычисления в рекурентной.

ТЗИ>Я такого не припоминаю. Там были обычные циклы. Я не спорю, что это можно выразить рекуррентно, но в средней школе рекурсия вроде не упоминалась.


В средней школе и циклов, и рекурсии даже близко не было.

G>>Да ну?

G>>Вспоминаем как доказывать по индукции:
G>>1)Определяем базовый (или несколько базовых случаев) при фиксированном N
G>>2)Предполагаем что утверждение выполняется для N (формальность)
G>>3)Доказываем для N+k, где k — константа и обычно равна 1

ТЗИ>Ну вспоминаем. Че-то вы не то написали.


ТЗИ>Для индукции нужно доказать истинность двух утверждений:


ТЗИ>1) Истинность F(n)

Неверно, истинность F(n) предполагаем, доказывать надо для F(N0),F(N1)... — базовые случаи
ТЗИ>2) Истинность импликации F(n) => F(n + k),
Именно, и как это доказывается? Выражением F(n + k) через F(n) — вот тебе и рекурсия.
Re[9]: Expression Tree для описания алгоритмов
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 19.05.10 08:55
Оценка:
Здравствуйте, VladD2, Вы писали:

G>>
G>>let sum = fold (+) 0
G>>

VD>
VD>Func<List<int>, int> sum = lst => lst.Aggregate(0, (x, acc) => x + acc);
VD>


VD>так что некоторых фич нет.


О чём и речь.

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


Ну ты сравни строку на F# и C# Потом в C# операция определена только над списком целых, и я не знаю насчёт F#, а в Haskell тип схожего выражения будет

(Foldable f, Integral i) => f i -> i


Описание выделенного на C# будет ужасно
Re[10]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.10 10:53
Оценка:
Здравствуйте, lomeo, Вы писали:

L>О чём и речь.


Цитировать надо добросовестно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Expression Tree для описания алгоритмов
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 19.05.10 10:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Цитировать надо добросовестно.


G>Даже в таком простом коде на F# используется несколько концепций, которых нету в C#.

VD> так что некоторых фич нет.
L>>О чём и речь.

Так пойдёт?
Re[12]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.10 11:13
Оценка:
Здравствуйте, lomeo, Вы писали:

VD>>Цитировать надо добросовестно.


G>>Даже в таком простом коде на F# используется несколько концепций, которых нету в C#.

VD>> так что некоторых фич нет.
L>>>О чём и речь.

L>Так пойдёт?


Нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Expression Tree для описания алгоритмов
От: Undying Россия  
Дата: 19.05.10 11:54
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>Большинству людей как раз будет ближе функциональщина, так как они не программисты, а функциональщина ближе к математической нотации чем

FR>сиобразные.

Ты это всерьез считаешь, что большинству людей близка математическая нотация? Подавляющее большинство инженеров последний раз с математической нотацией сталкивается в ВУЗе, после чего с успехом ее забывает, т.к. практические задачи где она применима встречаются крайне редко.
Re[7]: Expression Tree для описания алгоритмов
От: FR  
Дата: 19.05.10 12:36
Оценка:
Здравствуйте, Undying, Вы писали:

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


А с нотацией или псевдокодом основанными на императивных языках программирвания они сталкиваются еще реже, и "изученный" бейсик или паскаль вылетает из головы гораздо быстрее чем математика.
Re[13]: Expression Tree для описания алгоритмов
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 19.05.10 12:59
Оценка:
Здравствуйте, VladD2, Вы писали:

L>>Так пойдёт?

VD>Нет.

Почему?
Re[14]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.10 14:54
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Почему?


Потому что цитата вырвана из контекста и ее суть искажена.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 19.05.10 16:27
Оценка:
Здравствуйте, VladD2, Вы писали:

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


N>>>>Потому что сейчас есть Curry.


VD>>>А ты сам то это чудо используешь?


B>>Это не аргумент если вопрос задан в теоретической плоскости.


VD>А я говорил, что это аргумент?

VD>Это вопрос!

B>>В этом смысле очень даже решает проблему. Здесь и алгоритмов не надо писать. Этим занимается компьютер. Беда только в эффективности. Думаю если объединить не две (как в carry) а три парадигмы (включая императивную) хорошо получится..


VD>У меня были мысли включить аналог системы вывода правил пролога в Немерле в виде макросов (или даже в ядро второй версии языка). Но это не малый объем работы. Плюс нужны знания о том как реализовать алгоритм вывода эффективно, так как простой перебор с откатами не самое лучшее решение с точки зрения эффективности. Как я понимаю в реальных компиляторах и интерпретаторах Пролога используется море эвристик и прочих оптимизаций.


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


VD>Так что если есть желающие, милости просим!

Думал ответишь.. Понимаю что это серьезно. Но легко в виде макросов не получится. После трансляции все высказывания должны составлять среду в которой будет искаться решение (в смысле интерпретация целевых высказываний).
Re[22]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 19.05.10 18:44
Оценка:
G>В средней школе и циклов, и рекурсии даже близко не было.

Я и говорю, рекурсии не было, а циклы — были: последовательность шагов с возвратом на один из шагов назад = цикл.

ТЗИ>>1) Истинность F(n)

G>Неверно, истинность F(n) предполагаем, доказывать надо для F(N0),F(N1)... — базовые случаи

Ладно. Еще раз, более просто, надо доказать истинность двух утверждений:

1) P(1),
2) P(n) => P(n + 1).

Случай n + k не будем рассматривать, поскольку он тривиально приводится к n + 1.

Рассуждение про "предполагаемую истинность" — это всего лишь простонародное объяснение импликации.

Индукция — это всего лишь цепочка импликаций.

ТЗИ>>2) Истинность импликации F(n) => F(n + k),

G>Именно, и как это доказывается? Выражением F(n + k) через F(n) — вот тебе и рекурсия.

Необязательно. Это доказывать можно как угодно — на индукцию это не влияет.
Re[22]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 19.05.10 19:03
Оценка:
DM>...натуральные числа — это частный случай рекурсивной структуры:
DM>Nat = Zero | Succ Nat

Ну да, линейную структуру можно определить рекурсивно. То есть определить с помощью рекурсивной порождающей (определяющей) функции, как написано выше. А можно определить и не с помощью рекурсии, а с помощью порождающей циклической процедуры — последовательности шагов. Это эквивалентные представления.

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

В школьной математике нам давали нерекурсивное представление.

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

Ну вот можно взять справочник по математике за школьный курс и найти там рекурсию.
Re[23]: Expression Tree для описания алгоритмов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.10 19:11
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Вообще, моя первоначальная мысль была всего лишь о том, что я не могу вспомнить, чтобы я так уж часто видел (если вообще видел) в учебниках по математике, не относящихся к computer science, запись рекурсивных функций, кроме, например, факториала и специфического раздела про рекуррентные соотношения и производящие функции.


ТЗИ>Ну вот можно взять справочник по математике за школьный курс и найти там рекурсию.


Арифметическую и геометрическую прогрессии в школе не изучают? Для них таки норма выражать последующий член через предыдуший.
Re[24]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 19.05.10 19:34
Оценка:
S>Арифметическую и геометрическую прогрессии в школе не изучают? Для них таки норма выражать последующий член через предыдуший.

Да, согласен. Сам не понимаю, зачем я начал это глупое обсуждение.
Re[11]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.10 19:48
Оценка:
Здравствуйте, batu, Вы писали:

VD>>Так что если есть желающие, милости просим!

B>Думал ответишь..

На что? Не понял.

B>Понимаю что это серьезно. Но легко в виде макросов не получится.


Легко не получится ни в каком виде. Но в виде макросов получится точно легче чем если делать язык с нуля.

B>После трансляции все высказывания должны составлять среду в которой будет искаться решение (в смысле интерпретация целевых высказываний).


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

ЗЫ

Кстати, сам компилятор немерла использует констрэйн-солвер который является укрощенной реализацией пролога.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.05.10 07:13
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

G>>В средней школе и циклов, и рекурсии даже близко не было.


ТЗИ>Я и говорю, рекурсии не было, а циклы — были: последовательность шагов с возвратом на один из шагов назад = цикл.

В школе? Это что за школа где такое дают? Я помню только 11 класс, такого точно не было.

ТЗИ>>>2) Истинность импликации F(n) => F(n + k),

G>>Именно, и как это доказывается? Выражением F(n + k) через F(n) — вот тебе и рекурсия.

ТЗИ>Необязательно. Это доказывать можно как угодно — на индукцию это не влияет.


Только если доказывается истинность F(n+1) без участия F(n), то и вся индукция не нужна, потому что можно для любого n доказать истинность F(N).

Если ты еще не понял: сама по себе индукция применяется именно там где есть рекурсия, иначе это не индукция получается.
Re[12]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 20.05.10 11:24
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>Так что если есть желающие, милости просим!

B>>Думал ответишь..

VD>На что? Не понял.


B>>Понимаю что это серьезно. Но легко в виде макросов не получится.


VD>Легко не получится ни в каком виде. Но в виде макросов получится точно легче чем если делать язык с нуля.

Что значит "делать язык с нуля"?
1. Сочинять синтаксис?
2. Делать транслятор?
3. Реализовать ото что оттранслировано?

B>>После трансляции все высказывания должны составлять среду в которой будет искаться решение (в смысле интерпретация целевых высказываний).


VD>Макрос позволяет задать необходимый синтаксис и семантику. Реализацию конечно же придется писать самостоятельно.

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

VD>ЗЫ


VD>Кстати, сам компилятор немерла использует констрэйн-солвер который является укрощенной реализацией пролога.

Не сомневаюсь что сочинить синтаксис и оттранслировать будет легче на какой-то базе. И парсеров хватает. Вопрос не в том. Как ты пишешь "алгоритмическая сторона ясна" так тут как раз и не ясна. В логичском программировании алгоритм строит не програмист, а сама интерпретрующая система. Т.е. если ты определил несколько функций и высказываний, то вызовом нужных по теме функций осуществялется не программист, а сама система на основе инерпретации. Совсем другой подход. Получается макрос не выполняется а на основе макросов (так ты их назвал) конструируется алгоритм во время выполнения. Иногда тупо методом перебора. Но это уже тема построения интерпретатора. И как этот интерпретатор вмонтировать в уже существующую систему я не понимаю. Он должен грузиться вместе с оттранслированной программой. С каждой? Глупо. А куда его влепить? Это должно быть средой (или виртуальной машиной) интерпретирующей наши сочиненные макросы. И не макросы это.. Макросы ж сразу в машинные (или промежуточные) команды транслируются, а нам в виртуальную машину необходимо передать именно семантическую структуру высказываний, функций и прочую матоту которая будет информацией для интерпретатора, который уже и будет строить алгоритм.
Могу сказать что я придумал как это сделать.. Но делать прийдется таки с нуля.. Но получится круче немерлы..
Re[13]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.05.10 11:46
Оценка:
Здравствуйте, batu, Вы писали:

B>Что значит "делать язык с нуля"?

B>1. Сочинять синтаксис?
B>2. Делать транслятор?
B>3. Реализовать ото что оттранслировано?

И то, и другое, и третее. И еще кое-что. Язык не может жить обособленно. Он должен взаимодействовать с унивирсальынм языком. Для внешнего ДСЛ-я это еще одна проблема.

B>Не сомневаюсь что сочинить синтаксис и оттранслировать будет легче на какой-то базе. И парсеров хватает. Вопрос не в том. Как ты пишешь "алгоритмическая сторона ясна" так тут как раз и не ясна.


Раз не ясна, то "ой".

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


Я в курсе (за исключением интерпретации). Я говорил о алгоритмах которые как раз и создают код вывода, а не о самом коде вывода. Т.е. в твоей терминалогии код интерпретатора.

B> Получается макрос не выполняется а на основе макросов (так ты их назвал) конструируется алгоритм во время выполнения.


Во время выполнения — это плохой подход. Нужно конечно во время компиляции. Эдакое частичное вычисление.

B> Иногда тупо методом перебора. Но это уже тема построения интерпретатора.


Еще раз повтоюсь, что интерпретатор — это дна из возможных реализаций. И самая плохая.

B>И как этот интерпретатор вмонтировать в уже существующую систему я не понимаю.


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

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

B>Он должен грузиться вместе с оттранслированной программой. С каждой?


Зачем? Только если использована соответствующий макрос (или макробибилотека).

B>Глупо. А куда его влепить? Это должно быть средой (или виртуальной машиной) интерпретирующей наши сочиненные макросы. И не макросы это.. Макросы ж сразу в машинные (или промежуточные) команды транслируются, а нам в виртуальную машину необходимо передать именно семантическую структуру высказываний, функций и прочую матоту которая будет информацией для интерпретатора, который уже и будет строить алгоритм.


Все это нужно представлять в виде структур данных.

B>Могу сказать что я придумал как это сделать.. Но делать прийдется таки с нуля.. Но получится круче немерлы..


Думаю, что ты просто несколько узко смотришь на задачу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 20.05.10 12:17
Оценка: :)
Здравствуйте, VladD2, Вы писали:

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




B>>Могу сказать что я придумал как это сделать.. Но делать прийдется таки с нуля.. Но получится круче немерлы..


VD>Думаю, что ты просто несколько узко смотришь на задачу.

Обычное труднопонимание для начала. Надеюсь при более плотном общении это пройдет. Я предлагаю систему которая говорю будет круче немерлы.. Вот здесь часть высокого уровня. здесь Здесь предусмотрено все. И императивная парадигма и функциональная и логическая и формирование и редактирование документов и парсеры и вообще все. Подробности лучше обсуждать в аське. 139070664
Re[14]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 20.05.10 12:22
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Вместо макросов немерлы там объекты класса Instruction. Есть еще объекты класса Class и Type. Class — это для объектов, Type- для значений. Ну, надеюсь почитаешь.
Re[14]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 20.05.10 12:29
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Вот только что прочитал здесь про блоги и про вики, так в моей системе (и языке) и эти проблемы легкорешаемы и вообще весь электронный документоборот. Предлагаемый язык и система не только программы способена писать, но и создавать и редактировать документы с любыми объектами. В частности с буквами. В этом, частном случае, это текстовые документы. А может быть и страницей сайта или таблицей или базой данных. Ну, и мета-объекты (у меня просто понятия (Declaration) и много-много чего еще
Re[15]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.05.10 16:08
Оценка:
Здравствуйте, batu, Вы писали:

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


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


B>Вот только что прочитал здесь про блоги и про вики, так в моей системе (и языке) и эти проблемы легкорешаемы и вообще весь электронный документоборот. Предлагаемый язык и система не только программы способена писать, но и создавать и редактировать документы с любыми объектами. В частности с буквами. В этом, частном случае, это текстовые документы. А может быть и страницей сайта или таблицей или базой данных. Ну, и мета-объекты (у меня просто понятия (Declaration) и много-много чего еще


Документы да еще и "В частности с буквами." — это коечно здорово. Только вот есть два вопроса которые надо решить.
1. Нужно ли это хоть кому-то кроме тебя?
2. Когда это дело можно будет использовать? Да и вообще появится ли оно хоть когда нибудь.

Я читал твои описания, но энтузиазма что-то все это у меня не вызвало. Разговоры о шрифтах, цветах и т.п. вообще какие-то бредовые. Я тут поднимал вопрос о том не использовать ли в Немерле юникодные символы и народ в один голос сказал — "нет", так как код нужно еще передавать через почту и публиковать в форумах где еще далеко не везде поддерживается юникод. К тому же мало кто хочет связываться с символами которых нет на клавиатуре. А уж шрифты и цвета — это просто смешно. Есть проверенные решения. Цвета уже задействованы для выделения синтаксических конструкций. Большое количество шрифтов на экране будет коробить глаз и путать людей.о

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

Так что ты конечно занимайся своим языком. Может быть чего-то из этого и выйдет. Но лично мне нужен иструмент здесь и сейчас. Причем не умозрительный, а соврешенно реальный и проверенный на практике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.05.10 16:22
Оценка:
Здравствуйте, batu, Вы писали:

B>Я предлагаю систему которая говорю будет круче немерлы.


"Будет" не канает. Ты сначал сделай. Потом попробуй хотя бы человек 5 убедить в правоте своего утверждения, а потом уже можно будет о чем-то говорить.

Пока что Немерл самый мощьй язык для дотнета. И один из самых мочных из существующих на сегодня и пригодных для реального использования. А твой язык пока что только план. Причем уже даже на уровен плана он вызвает массу сомнений.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 20.05.10 16:26
Оценка:
Здравствуйте, VladD2, Вы писали:

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


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


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


B>>Вот только что прочитал здесь про блоги и про вики, так в моей системе (и языке) и эти проблемы легкорешаемы и вообще весь электронный документоборот. Предлагаемый язык и система не только программы способена писать, но и создавать и редактировать документы с любыми объектами. В частности с буквами. В этом, частном случае, это текстовые документы. А может быть и страницей сайта или таблицей или базой данных. Ну, и мета-объекты (у меня просто понятия (Declaration) и много-много чего еще


VD>Документы да еще и "В частности с буквами." — это коечно здорово. Только вот есть два вопроса которые надо решить.

VD>1. Нужно ли это хоть кому-то кроме тебя?
Вот тебе нужно. И многим нужно. Только все пытаются обойтись тем что есть. Не всегда это возможно в принципе. А зачастую стоит столько же сколько новую систему сделать.
VD>2. Когда это дело можно будет использовать? Да и вообще появится ли оно хоть когда нибудь.
Надеюсь появится. Когда не знаю. Не только от меня зависит. И от тебя тоже.

VD>Я читал твои описания, но энтузиазма что-то все это у меня не вызвало. Разговоры о шрифтах, цветах и т.п. вообще какие-то бредовые. Я тут поднимал вопрос о том не использовать ли в Немерле юникодные символы и народ в один голос сказал — "нет", так как код нужно еще передавать через почту и публиковать в форумах где еще далеко не везде поддерживается юникод. К тому же мало кто хочет связываться с символами которых нет на клавиатуре. А уж шрифты и цвета — это просто смешно. Есть проверенные решения. Цвета уже задействованы для выделения синтаксических конструкций. Большое количество шрифтов на экране будет коробить глаз и путать людей.о

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

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


VD>Так что ты конечно занимайся своим языком. Может быть чего-то из этого и выйдет. Но лично мне нужен иструмент здесь и сейчас. Причем не умозрительный, а соврешенно реальный и проверенный на практике.

И ты пробуй. Это именно тот случай когда заново сделать будет проще. Но ты ж не повериишь
Re[17]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.05.10 17:38
Оценка: 8 (1)
Здравствуйте, batu, Вы писали:

VD>>Документы да еще и "В частности с буквами." — это коечно здорово. Только вот есть два вопроса которые надо решить.

VD>>1. Нужно ли это хоть кому-то кроме тебя?
B>Вот тебе нужно.

Мне? Мне не нужна Лада или что там еще? Мне нужна поддержка пролого-подобного языка в Немерле (или дотнете). Мне нужно чтобы я мог в своей программе на Немерле воспользоваться мощью логического программирования для решения определенных задач. Например, для реализации того же вывода типов в самом же Немерле. Сейчас для этого используется специализированный код, но можно было бы использовать и универсальный.

B>И многим нужно. Только все пытаются обойтись тем что есть.


Я не заметил ни одного одобрительного отзыва на твои описания. Я плохо смотрел?

B>Не всегда это возможно в принципе. А зачастую стоит столько же сколько новую систему сделать.


Сделать что-то с нуля по определителю сложнее чем сделать часть.

Что же до языка, то их вообще нельзя проектировать сверху вниз. Точнее можно, но результат известен заранее. Он будет академическим и в лучшем случае отдельные идеи из него через много лет попадут в какой-нибудь реально живущий язык.

Вот прекрасный пример — Эфил. Это в общем-то весьма простой язык который был создан ради реализации концепции "Design by contract" придуманной его автором (Меером). Язык так и не получил серьезной популярности. Это привело к тому, что идеи (отличные идеи, надо сказать!) заложенные в его языке пробивали себе дорогу к реальным программистам последние 25 лет. И только в этом коду эти идеи (в усеченном виде) попали в дотнет, а значит к конечному потребителю.

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

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


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

VD>>Так что ты конечно занимайся своим языком. Может быть чего-то из этого и выйдет. Но лично мне нужен инструмент здесь и сейчас. Причем не умозрительный, а совершенно реальный и проверенный на практике.

B>И ты пробуй. Это именно тот случай когда заново сделать будет проще. Но ты ж не повериишь

А я и не верю. И собственно хочу заняться. Но не изобретением нового мира с нуля, а улучшением того что имеется.

С нуля лучше писать реализацию компилятора. Тут действительно работает принцип "проще написать за нова нежели переписать код с ошибками". А вот дизайн языка точно нельзя делать с нуля. На свете есть только один реальный язык созданный с нуля — Фортран. Да и то возможно я ошибаюсь. Все остальные языки черпали идеи из других языков. И самые успешные языки оказались те которые грамотно сочленяли эти идеи внося минимум нового.

У меня есть идея (и желание) написать новую версию Немерла. Но задачи этого проекта не создать новый язык (или сильно отличающийся), а развить и улучшить то хорошее что уже есть в немерле.
Вот краткий план того что планируется:
1. Снять ограничения на изменение синтаксиса. Это будет достигнуто за счет перевода компилятора и макросов на PEG.
2. Реализовать сам язык полностью на макросах. Парсера как такового не будет вовсе. Вместо этого конструкции языка будут оформляться в виде макросов нового поколения. Это так же уменьшит базу языка и позволит автоматически генерировать документацию по нему.
3. Доработать систему типов введя поддержку зависимых типов и усилив возможности ограничений (констрэйнов).
4. Упростить разработку макросов и DSL-ей на их базе.
5. Сделать компилятор модульным (разделить его на ряд библиотек которые можно будет использовать по отдельнсоти).
6. Сделать компилятор многопоточным, а АСТ и другие структуры данных доступные макросам версионными. Это с одной стороны ускорит компилятор, а с другой облегчит поддержку языка в IDE.
7. Отказаться от System.Reflection.Emit, а для получения метаданных и генерации кода использовать набор абстракций (интерфейсов и т.п.) позволяющий легко менять нижележащую библиотеку. По умолчанию использовать CCI Matadata.
8. Модернизировать алгоритм вывода типов с тем чтобы а) позволить выводить типы для разных функций в разных потоках, б) упростить реализацию, в) устранить имеющее место дублирование кода. В итоге вывод типов должен стать быстрее, надежнее и проще поддаваться модификации. Такие вещи как алгоритм разрешения перегрузки нужно сделать максимально декларативно, в плоть до того, чтобы по нему можно было бы сгенерировать спецификацию языка.

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

При этом сам язык для пользователя должен измениться минимально. Прикладной код вообще должен компилироваться без изменений. Макросы в массе своей тоже. Возможно часть макросов придется переписать, но по возможности будем стараться поддержать старый синтаксис и семантику. Хотя без нового синтаксиса и семантики макросов не обойтись.

Вот как-то так. И уж точно мы не планируем создание нового языка с совершенно новыми и чудесными возможностями. Этот язык не будет читать программы на уровне символов и делать какие-то невообразимые мысли. Мы просто хотим снять ограничения и применить последние достижения науки при разработке новой версии.

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

Ты же предлагаешь революцию сверху. А они практически все обречены на провал.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 20.05.10 18:29
Оценка: :)
Здравствуйте, VladD2, Вы писали:

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


VD>>>Документы да еще и "В частности с буквами." — это коечно здорово. Только вот есть два вопроса которые надо решить.

VD>>>1. Нужно ли это хоть кому-то кроме тебя?
B>>Вот тебе нужно.

VD>Мне? Мне не нужна Лада или что там еще? Мне нужна поддержка пролого-подобного языка в Немерле (или дотнете). Мне нужно чтобы я мог в своей программе на Немерле воспользоваться мощью логического программирования для решения определенных задач. Например, для реализации того же вывода типов в самом же Немерле. Сейчас для этого используется специализированный код, но можно было бы использовать и универсальный.


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


VD>Ты же предлагаешь революцию сверху. А они практически все обречены на провал.

Извини, я много удалил из твоего. Комментировать ничего не буду. Технологии Net тупиковые. Ну, тоже не поверишь. Там теоретически не возможно сделать то, что нужно очень многим. И тебе в частности.
Жаль, что кроме цвета и шрифтов (а это я вообще убрал) никто ничего нового не обнаружил. А там много чего есть принципиально нового и перспективого. Ты не удивился что я практически не отвечал на обсуждение моего языка? Дело в том, что этот материал разместил не я. Я вообще об этом не знал. Ну, и там старая версия обсуждалась. Мне уже позже сообщили. Но пароль дали. А ник мой. Так что я не напрягаюсь пока. Просто интересно пообщаться с тобой и еще есть грамотные. А я не обижаюсь. Если помнишь я предложил пообщаться. Только при общении станет понятна другая точка зрения. Если интересно, то я расскажу почему не возможно втулить логическое программирование. Или почему принципиально невозможно сделать электронный документооборот. С глобализацией данных проблемы возникнут.. Ну, и еще много чего.. Только не считай собеседника конченым тупицей Если хочешь пообщаемся.. Был бы рад если бы ты первые три раздела моего опуса прочитал внимательно. А если не интересно, то желаю удачи в любом случае. Жизнь длинная.. и мало ли что нас ждет впереди.
Re[19]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.05.10 20:09
Оценка: +1
Здравствуйте, batu, Вы писали:

B>Извини, я много удалил из твоего. Комментировать ничего не буду.


Ничего страшно. Только не обижайся, плиз. Я высказал, возможно непрямое, но честное мнение.

B>Технологии Net тупиковые. Ну, тоже не поверишь. Там теоретически не возможно сделать то, что нужно очень многим. И тебе в частности.


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

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

Писать аналогичную миртуальную машину с нуля самому — это вообще означает никогда в жизни не получить качественного результата.

Так что это конечно компромисс, но лучшего решения просто нет.

B>Жаль, что кроме цвета и шрифтов (а это я вообще убрал) никто ничего нового не обнаружил.


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

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

B>А там много чего есть принципиально нового и перспективого. Ты не удивился что я практически не отвечал на обсуждение моего языка? Дело в том, что этот материал разместил не я. Я вообще об этом не знал. Ну, и там старая версия обсуждалась. Мне уже позже сообщили. Но пароль дали. А ник мой. Так что я не напрягаюсь пока. Просто интересно пообщаться с тобой и еще есть грамотные. А я не обижаюсь. Если помнишь я предложил пообщаться. Только при общении станет понятна другая точка зрения.


Согласен. Кстати тебе стоило бы попробовать изложить основу идеологии своего языка, а не выкатывать подробный документ. (он все равно не достаточно подробен). Объяснить почему то-то и тот-то приемущество, почему нет этого и этого.

B>Если интересно, то я расскажу почему не возможно втулить логическое программирование.


Интересно, рассказывай.

B>Или почему принципиально невозможно сделать электронный документооборот.


Еще было бы интересно понять зачем этот "электронный документооборот" вообще нужен 99% программистов не занимающихся этой проблематикой.

B>С глобализацией данных проблемы возникнут.. Ну, и еще много чего.. Только не считай собеседника конченым тупицей Если хочешь пообщаемся.. Был бы рад если бы ты первые три раздела моего опуса прочитал внимательно. А если не интересно, то желаю удачи в любом случае. Жизнь длинная.. и мало ли что нас ждет впереди.


Проблема в том, что мой список чтения уже привыкает объем который я могу прочесть за год. Чтобы читать что-то по второму разу мне нужен стимул. Таким стимулом мог бы стать "краткий курс партии" описывающий иделогию языка, его главные фишки, целевую аудиторию и т.п. Но сжато, чтобы это уместилось в одно сообщение. Тогда может быть и не только я прочту и возможно даже изменю свое мнение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 20.05.10 21:41
Оценка:
G>Если ты еще не понял: сама по себе индукция применяется именно там где есть рекурсия, иначе это не индукция получается.

А откуда у тебя взялось такое убеждение? Это ты где-то прочитал или сам к этому пришел? Дай хотя бы ссылку на источник.

Не знаю, как ты собираешься выражать F(n+1) через F(n), если F(n) — это логическое высказывание об n-ном элементе множества. Ты, наверно, имел в виду выражение элемента n+1 через элемент n, но что это дает для доказательства импликации F(n) -> F(n+1)?

Допустим, в Википедии есть пример доказательства по индукции. Где там выражение F(n+1) через F(n)?
Re[20]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 21.05.10 05:27
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Ничего страшно. Только не обижайся, плиз. Я высказал, возможно непрямое, но честное мнение.

Та не вопрос. Лучше честно. Вранье ж не помогает исправить ошибки и недостатки.


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

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


VD>Согласен. Кстати тебе стоило бы попробовать изложить основу идеологии своего языка, а не выкатывать подробный документ. (он все равно не достаточно подробен). Объяснить почему то-то и тот-то приемущество, почему нет этого и этого.

Я думаю ответом может быть следующий документ здесь

Это не заменяет краткий курс, но очерчивает круг решаемых проблем.
Вопросы, конечно, возникнут. Там на полях уже есть замечания.
Re[25]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.05.10 05:45
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

G>>Если ты еще не понял: сама по себе индукция применяется именно там где есть рекурсия, иначе это не индукция получается.


ТЗИ>А откуда у тебя взялось такое убеждение? Это ты где-то прочитал или сам к этому пришел? Дай хотя бы ссылку на источник.

На первом курсе еще учили.

ТЗИ>Не знаю, как ты собираешься выражать F(n+1) через F(n), если F(n) — это логическое высказывание об n-ном элементе множества. Ты, наверно, имел в виду выражение элемента n+1 через элемент n, но что это дает для доказательства импликации F(n) -> F(n+1)?

А как ты докажешь истинность F(n+1) если оно никак не связано с F(n) ?

ТЗИ>Допустим, в Википедии есть пример доказательства по индукции. Где там выражение F(n+1) через F(n)?

F(n)


F(n+1)


Если ты не заметил, то первое преобразование это как раз применение F(n)

Вообще меньше википедию читай, своим мозгом думай.
Re[21]: Expression Tree для описания алгоритмов
От: Курилка Россия http://kirya.narod.ru/
Дата: 21.05.10 05:45
Оценка:
Здравствуйте, batu, Вы писали:

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


VD>>Согласен. Кстати тебе стоило бы попробовать изложить основу идеологии своего языка, а не выкатывать подробный документ. (он все равно не достаточно подробен). Объяснить почему то-то и тот-то приемущество, почему нет этого и этого.

B>Я думаю ответом может быть следующий документ здесь

Замечание по процедурному вопросу: а ты не пробовал пользовать более современные и дружественные к пользователю способы передачи информации? HTML например? Хотяб загрузил это в Google Docs или завёл какой блог или типа того. А то как-то начинает вспоминаться, что Лада — это несколько устаревшая машина
Re[22]: Expression Tree для описания алгоритмов
От: batu Украина  
Дата: 21.05.10 07:21
Оценка:
Здравствуйте, Курилка, Вы писали:

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


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


VD>>>Согласен. Кстати тебе стоило бы попробовать изложить основу идеологии своего языка, а не выкатывать подробный документ. (он все равно не достаточно подробен). Объяснить почему то-то и тот-то приемущество, почему нет этого и этого.

B>>Я думаю ответом может быть следующий документ здесь

К>Замечание по процедурному вопросу: а ты не пробовал пользовать более современные и дружественные к пользователю способы передачи информации? HTML например? Хотяб загрузил это в Google Docs или завёл какой блог или типа того. А то как-то начинает вспоминаться, что Лада — это несколько устаревшая машина

Та надо бы.. Уже пора. Задумалсо..
Re[24]: Expression Tree для описания алгоритмов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.05.10 09:30
Оценка: :)
Здравствуйте, samius, Вы писали:

S>Арифметическую и геометрическую прогрессии в школе не изучают?


Сегодня по радио услышал пример рекурсии для дошкольников

Мы едем, едем, едем
В далекие края,
Хорошие соседи,
Счастливые друзья.
Нам весело живется,
Мы песенку поем,
И в песенке поется
О том, как мы живем.


(С) Сергей Михалков.
Re[26]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 24.05.10 19:57
Оценка:
G>>>Если ты еще не понял: сама по себе индукция применяется именно там где есть рекурсия, иначе это не индукция получается.
ТЗИ>>А откуда у тебя взялось такое убеждение? Это ты где-то прочитал или сам к этому пришел? Дай хотя бы ссылку на источник.
G>На первом курсе еще учили.

Пруфлинк в студию.

ТЗИ>>Допустим, в Википедии есть пример доказательства по индукции. Где там выражение F(n+1) через F(n)?

G>F(n)
G>

G>F(n+1)

G>

G>Если ты не заметил, то первое преобразование это как раз применение F(n)


Что выражает сия фраза я не понял. Ткни меня носом, пожалуйста, где здесь выражение F(n+1) через F(n).

G>Вообще меньше википедию читай, своим мозгом думай.


Ладно, постараюсь.
Re[2]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 24.05.10 19:58
Оценка:
Я че-то не понимаю, почему это мое глубокомысленное сообщение не вызвало никаких каментов, а когда я пишу тупак про отстутствие рекурсии в математике — сразу каментов море?
Re[3]: Expression Tree для описания алгоритмов
От: FR  
Дата: 25.05.10 02:36
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Я че-то не понимаю, почему это мое глубокомысленное сообщение не вызвало никаких каментов, а когда я пишу тупак про отстутствие рекурсии в математике — сразу каментов море?


Как вы яхту назовете так она и поплывет.

Re[2]: Expression Tree для описания алгоритмов
От: mkizub Литва http://symade.tigris.org
Дата: 12.06.10 13:48
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Тут нужен не expression tree, а semantic tree, язык, семантическая насыщенность которого на порядок больше, чем у существующих на сегодня языков программирования.


ТЗИ>Мне кажется, нечто подобное можно было бы изобразить на языке типа пролога. То есть первичным является построение онтологии, покрывающей все языки программирования, на которых предполагается генерировать код.


UML?
SOP & SymADE: http://symade.tigris.org , блог http://mkizub.livejournal.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.