Re[28]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 01:23
Оценка:
DG>>при чем здесь вообще язык? ты хочешь сказать, что понятие ad hoc/parametric-полиморфизма зависит от языка?
S>Нет, не хочу. На каком бы языке ты не записывал полиморфное сложение, это будет ad-hoc.

функция сложения от трех параметров, определенная через сложение от двух параметров — имеет полиморфизм параметрический или ad-hoc?


DG>>и сооответственно, Add — параметрически-полиморфен, а Operation<T>.Plus — ad-hoc полиморфна

S>По каким признакам ты судишь?

тело функции зависит от типа аргументов — ad-hoc, иначе — parametric(есть if от типов или нет)


S>Определи вид полиморфизма следующих функций:

S>
S>object OpPlus(object a, object b)
S>{
S>    if(a is int && b is int)
S>       return (int)a + (int)b;
S>    throw new ArgumentException();
S>}

ad-hoc полиморфизм (без статической проверки). тело функции зависит от типов аргументов

S>object Add1(objecta a, object b)
S>{
S>    return OpPlus(a, b);
S>}

parametric полиморфизм (без статической проверки). тело функции не зависит от типа аргументов

S>T Add<T>(T a, T b)
S>{
S>    return OpPlus(a, b);
S>}
S>


parametric полиморфизм (со статической проверкой). тело функции не зависит от типа аргументов


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


DG>>это утверждение противоречит принципу инкапсуляции, ты утверждаешь, что свойства одной функции Add(T,T)->T зависят от реализации совсем другой функции operator +(T,T)->T

S>Что за принцип инкапсуляции? Да, я утверждаю что свойства функции Add1 зависят от реализации совсем другой функции OpPlus. И еще утверждаю что сложение всегда ad-hoc полиморфно.

функции Swap_and_B и Swap_and_B2 какой полиморфизм имеют?
class B1<T>
{
  T Swap_and_B(T x, T y)
  {
    return B(y, x);
  }
  public Func<T,T,T> B;

  static T Swap_and_B2(T x, T y)
  {
    return B2(y, x);
  }
  public static Func<T,T,T> B2;

}
Re[28]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 01:28
Оценка:
S> И еще утверждаю что сложение всегда ad-hoc полиморфно.

вот это есть карго-культовое мышление. ты когда-то где-то от какого-то авторитета узнал, что сложение ad-hoc полиморфно.

и теперь это утверждение пихаешь всюду где видишь сложение — не разбираясь о чем говорил тот самый авторитет, и как связана текущая ситуация с исходным утверждением.
Re[29]: Функциональное метапрограммирование
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.12 01:59
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>функция сложения от трех параметров, определенная через сложение от двух параметров — имеет полиморфизм параметрический или ad-hoc?

ad-hoc

S>>По каким признакам ты судишь?


DG>тело функции зависит от типа аргументов — ad-hoc, иначе — parametric(есть if от типов или нет)

Очевидно что ты используешь своё определение, в котором имеет значение тело. В то время как я говорю о классическом определении.

DG>ad-hoc полиморфизм (без статической проверки). тело функции зависит от типов аргументов

DG>parametric полиморфизм (без статической проверки). тело функции не зависит от типа аргументов
DG>parametric полиморфизм (со статической проверкой). тело функции не зависит от типа аргументов
Я не подписывался обсуждать фантазии.

DG>функции Swap_and_B и Swap_and_B2 какой полиморфизм имеют?

DG>
DG>class B1<T>
DG>{
DG>  T Swap_and_B(T x, T y)
DG>  {
DG>    return B(y, x);
DG>  }
DG>  public Func<T,T,T> B;

DG>  static T Swap_and_B2(T x, T y)
DG>  {
DG>    return B2(y, x);
DG>  }
DG>  public static Func<T,T,T> B2;

DG>}
DG>

В классическом понимании — параметрический
Re[29]: Функциональное метапрограммирование
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.12 02:06
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>> И еще утверждаю что сложение всегда ad-hoc полиморфно.


DG>вот это есть карго-культовое мышление. ты когда-то где-то от какого-то авторитета узнал, что сложение ad-hoc полиморфно.


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


Ты ведь вообще не разбираешься, о чем кто говорит. Ты подменяешь понятия и говоришь о чем-то своем, даже не уведомляя что ты что-то подменил. Выясняется в конце разговора, если собеседник докопался.
Re[30]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 02:16
Оценка:
DG>>функции Swap_and_B и Swap_and_B2 какой полиморфизм имеют?
DG>>
DG>>class B1<T>
DG>>{
DG>>  T Swap_and_B(T x, T y)
DG>>  {
DG>>    return B(y, x);
DG>>  }
DG>>  public Func<T,T,T> B;

DG>>  static T Swap_and_B2(T x, T y)
DG>>  {
DG>>    return B2(y, x);
DG>>  }
DG>>  public static Func<T,T,T> B2;

DG>>}
DG>>

S>В классическом понимании — параметрический

а если Swap_And_B переименовать в Add, B переименовать в Plus и убрать перевертывание параметров, то сразу станет ad-hoc?
я правильно тебя понял?

class Operation<T>
{
 static T Add(T x, T y)
 {
    return B2(x, y);
 }
 public static Func<T,T,T> Plus;
}

вот здесь уже ad-hoc? неисповедимы твои пути, господи...
Re[30]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 02:57
Оценка:
S>Ты подменяешь понятия и говоришь о чем-то своем

проблема в том, что невозможно придумать миллион слов для миллиона оттенков, и поэтому используются другие подходы, в частности — fuzzy concepts.

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

обычно дискуссия выглядит так:
я прихожу и говорю, что rgb(220, 20, 60) — это красный, ты лезешь в вики и выясняешь, что там написано, что красный — это (255, 0, 0). и начинаешь меня критиковать за то, что я неправильно использую термины.

дальше я начинаю тебя пытать, а каким словом можно назвать цвет (254, 0, 0), (253, 0, 0), (252, 0, 0), (255, 0, 1) и т.д. — ты скрепя сердцем говоришь, что это тоже красный (хотя в вики это напрямую и не написано).

когда я пытаюсь тебе указать на разрыв в логике:
что цвет (250, 0, 0) — ты себе позволяешь называть красным, хотя это и некоторый отход от того определения, которое написано в вики,
а цвет (220, 20, 60) — ты мне называть красным уже не позволяешь, хотя это такой же отход от того определения, которое написано в вики;
и спрашиваю о твоей аргументации, как ты решаешь до какого предела цвет можно называть красным, а после какого нельзя — ты переходишь на последнюю линию обороны:
цвет (220, 20, 60) — нельзя называть красным, потому что (220, 20, 60) никогда не может быть красным.
Re[31]: Функциональное метапрограммирование
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.12 02:57
Оценка:
Здравствуйте, DarkGray, Вы писали:


DG>>>функции Swap_and_B и Swap_and_B2 какой полиморфизм имеют?

DG>>>
DG>>>class B1<T>
DG>>>{
DG>>>  T Swap_and_B(T x, T y)
DG>>>  {
DG>>>    return B(y, x);
DG>>>  }
DG>>>  public Func<T,T,T> B;
DG>>>}
DG>>>

S>>В классическом понимании — параметрический

DG>а если Swap_And_B переименовать в Add, B переименовать в Plus и убрать перевертывание параметров, то сразу станет ad-hoc?

DG>я правильно тебя понял?
Нет, неправильно. Суть метода Swap_And_B заключается в вызове делегата с измененным порядком аргументов. Это полиморфное параметрически действие, как бы ты его не называл и что бы не подсвовывал в качестве делегата. Как обертка этот метод полиморфен параметрически. Но если смотреть на него с абсолютной точки зрения, не зная его реализации, то его свойства зависят от того, что ты подсунул в делегат. Очевидно, что подменяя делегат ты будешь менять свойства оборачивающего метода. Можно сделать его ad-hoc или нет, можно сделать его чистым, или нечистым. И в этом ничего удивительного нет.
Если ты в коробку из под телевизора сунешь картошку — получишь коробку картошки.

DG>
DG>class Operation<T>
DG>{
DG> static T Add(T x, T y)
DG> {
DG>    return B2(x, y);
DG> }
DG> public static Func<T,T,T> Plus;
DG>}
DG>

DG>вот здесь уже ad-hoc? неисповедимы твои пути, господи...
С такой-то кашей в голове
Читай что пишут люди, а не выдумывай. В первую очередь это касается определений. Если ты что-то выдумал, то базис у тебя уже отличный от базиса людей, которые прочитали и поняли определение. Ты в другой системе понятий! Слова вроде те же, а смысл не тот!
Re[31]: Функциональное метапрограммирование
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.12 03:02
Оценка:
Здравствуйте, DarkGray, Вы писали:


S>>Ты подменяешь понятия и говоришь о чем-то своем


DG>проблема в том, что невозможно придумать миллион слов для миллиона оттенков, и поэтому используются другие подходы, в частности — fuzzy concepts.


DG>зы

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

DG>обычно дискуссия выглядит так:

DG>я прихожу и говорю, что rgb(220, 20, 60) — это красный, ты лезешь в вики и выясняешь, что там написано, что красный — это (255, 0, 0). и начинаешь меня критиковать за то, что я неправильно использую термины.
Ох уж эти сказочники...
Ты делаешь качественную подмену понятий а потом на примере легкой подмены цвета (количественной характеристики) показываешь свою позицию? Ну-ну.
Re[32]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 03:21
Оценка:
S>Нет, неправильно. Суть метода Swap_And_B заключается в вызове делегата с измененным порядком аргументов.

А суть метода Zzz(T x, T y){return xx(x, y);} заключается в том, что он дает еще одно имя для произвольного действия. и эта суть параметрически-полиморфна, она не зависит от того, чем является xx.

S> Но если смотреть на него с абсолютной точки зрения, не зная его реализации, то его свойства зависят от того, что ты подсунул в делегат. Очевидно, что подменяя делегат ты будешь менять свойства оборачивающего метода. Можно сделать его ad-hoc или нет, можно сделать его чистым, или нечистым. И в этом ничего удивительного нет.

S>Если ты в коробку из под телевизора сунешь картошку — получишь коробку картошки.

так никто тебя и не спрашивает каким свойством обладает коробка + содержимое, а спрашивают каким свойством обладает сама коробка в независимости от содержимого?
Re[32]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 03:28
Оценка:
S>Ты делаешь качественную подмену понятий а потом на примере легкой подмены цвета (количественной характеристики) показываешь свою позицию? Ну-ну.

так (220, 20, 60) можно называть красным или нельзя?
Re[33]: Функциональное метапрограммирование
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.12 03:57
Оценка:
Здравствуйте, DarkGray, Вы писали:


S>>Нет, неправильно. Суть метода Swap_And_B заключается в вызове делегата с измененным порядком аргументов.


DG>А суть метода Zzz(T x, T y){return xx(x, y);} заключается в том, что он дает еще одно имя для произвольного действия. и эта суть параметрически-полиморфна, она не зависит от того, чем является xx.

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

DG>так никто тебя и не спрашивает каким свойством обладает коробка + содержимое, а спрашивают каким свойством обладает сама коробка в независимости от содержимого?

Я ответил на оба вопроса. А ты не ответил, почему у тебя одинаковые функции обладают разными свойствами. Только не надо мне отвечать про ТВОЙ полиморфизм, основанный на телах.
Re[33]: Функциональное метапрограммирование
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.12 04:00
Оценка:
Здравствуйте, DarkGray, Вы писали:

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


DG>так (220, 20, 60) можно называть красным или нельзя?

Можно. Можно называть зеленым, но не рассчитывай на понимание.
Re[11]: Функциональное метапрограммирование
От: batu Украина  
Дата: 24.02.12 06:12
Оценка:
Здравствуйте, DarkGray, Вы писали:

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


DG>есть что-то на нем уже написанное? насколько большое?

DG>во что компилируется?
Нет. Пока все только в документации. И транслятор-демка. Вообще это не транслятор. Нет такого вообще. Это редактор концептов, он заменяет вообще все. И транслтор и редактор и браузер..Приложений нет как таковых..

B>>Из минусов с виндой не гармонирует..


DG>в смысле? как может язык с ОС не гармонировать?

Ну, так.. Даже расширений файлов нет. Все в едином формате.. И своя виртуальная машина..

B>> Даже алфавит строится по другому как частный случай перечислимых концептов. Да.. Я назвал это концептной парадигмой.. Можно и субъектной.. Потому как операторы (и вообще все понятия) создаются из концептов как объекты из классов..


DG>что такое концепт?

Концепт это наше все А без шуток, это единица с которой может работать компьютер. Теперь зададим вопрос, а что должно быть известно компьютеру для того что б он с этим "нечто" сомг работать. Оказывается необходимы всего две вещи :
1. Размер.
2. Программа запускаемая для реализации этого "нечто".
Добавим к этому "нечто" правила конструирования новых концептов и синтаксис, и назовем это концептом. Конечно, необходимы базовые концепты что бы мы могли создать все что угодно. Базовых концептов всего 5 Это сам концепт (Сoncept), Byte (определяющий размер), Property (определяет свойства концепта), Selector (формирующий адрес) и Document как загрузочная единица. К этим базовым концептам добавлены правила их объединения — группы. В тексте объединение концептов происходит с помощью скобок, каждая их которых соотвествует концептам -группам. Т.е. еще одной частью являются правила объединения или правила применения скобок или, как я назвал, правила группирования. Вкратце это все. К этому добавлю что программа реализующая концепт находится в обязательном свойстве Child.
Re[34]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 11:11
Оценка:
DG>>так никто тебя и не спрашивает каким свойством обладает коробка + содержимое, а спрашивают каким свойством обладает сама коробка в независимости от содержимого?
S>Я ответил на оба вопроса. А ты не ответил, почему у тебя одинаковые функции обладают разными свойствами. Только не надо мне отвечать про ТВОЙ полиморфизм, основанный на телах.

попробуй убрать эмоции, и написать автоматическую функцию, которая на вход берет код(например, в виде Ast-а), а на выходе выдает enum Polymorphism{ad-hoc, parametric, subtype, none}.
гарантирую, что с твоей трактовой полиморфизма такую функцию написать нельзя (а значит твое определение — магия, не имеющая алгоритмической основы).

зы
лучше, кстати, скажи — полиморфизм, кроме parametric, ad-hoc и subtype на твой взгляд еще какой-нибудь бывает?
Re[35]: Функциональное метапрограммирование
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.12 18:24
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>Я ответил на оба вопроса. А ты не ответил, почему у тебя одинаковые функции обладают разными свойствами. Только не надо мне отвечать про ТВОЙ полиморфизм, основанный на телах.


Ты опять ушел от ответа.

DG>попробуй убрать эмоции, и написать автоматическую функцию, которая на вход берет код(например, в виде Ast-а), а на выходе выдает enum Polymorphism{ad-hoc, parametric, subtype, none}.

DG>гарантирую, что с твоей трактовой полиморфизма такую функцию написать нельзя (а значит твое определение — магия, не имеющая алгоритмической основы).
Твоя гарантия, наверное, связана с тем, что задача некорректно поставлена. Легко написать функцию, обладающую признаками проявлений всех форм полиморфизма в одном теле, так что твой enum Polymorphism просто не сможет описать результат. Написать функцию, которая принимает AST и возвращает набор флагов не так уж и сложно. Никаких препятствий я не наблюдаю, но заниматься этим, разумеется тоже не собираюсь.

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

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

DG>зы

DG>лучше, кстати, скажи — полиморфизм, кроме parametric, ad-hoc и subtype на твой взгляд еще какой-нибудь бывает?
Это зависит от способа классификации. Видишь ли, если я скажу что не бывает, ты вставишь что полиморфизм бывает еще и статический и динамический. И что мне, потом спорить с тобой что это не отдельная форма? Нет уж.
А вообще у полиморфизма много проявлений. Можно, например, вилкой в ухе ковырять. Не параметрический, не ad-hoc, не subtype, но определенно полиморфизм. А можно известным терминам выдумывать новые смыслы, что бы потроллить на форуме. Тоже полиморфизм.
Re[34]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 19:47
Оценка:
S>Я ответил на оба вопроса. А ты не ответил, почему у тебя одинаковые функции обладают разными свойствами. Только не надо мне отвечать про ТВОЙ полиморфизм, основанный на телах.

одинаковые они только тем, что они делают одно и тоже.
строение у них при этом разное — одна есть надстройка над другой, при этом надстройка является параметрически-полиморфной, не зависящей от типа.
Re[35]: Функциональное метапрограммирование
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.12 19:50
Оценка:
Здравствуйте, DarkGray, Вы писали:

S>>Я ответил на оба вопроса. А ты не ответил, почему у тебя одинаковые функции обладают разными свойствами. Только не надо мне отвечать про ТВОЙ полиморфизм, основанный на телах.


DG>одинаковые они только тем, что они делают одно и тоже.

DG>строение у них при этом разное — одна есть надстройка над другой, при этом надстройка является параметрически-полиморфной, не зависящей от типа.

Это как это одна зависит от типа, другая нет, а делают одно и то же одним и тем же способом... Что-то темнишь.
Re[36]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 20:10
Оценка:
S>Это как это одна зависит от типа, другая нет, а делают одно и то же одним и тем же способом... Что-то темнишь.

первая функция лишь перенаправляет входные данные во вторую функцию, а полученный ответ от второй функции перенаправляет как свой ответ.
и эту работу она делает параметрически полиморфно, не делая различий по типу.
Re[37]: Функциональное метапрограммирование
От: samius Япония http://sams-tricks.blogspot.com
Дата: 24.02.12 20:52
Оценка:
Здравствуйте, DarkGray, Вы писали:


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


DG>первая функция лишь перенаправляет входные данные во вторую функцию, а полученный ответ от второй функции перенаправляет как свой ответ.

DG>и эту работу она делает параметрически полиморфно, не делая различий по типу.

И какая по-твоему польза от мнимой параметричности первой функции? Может она стала типобезопасной? Где бенефит?
Re[38]: Функциональное метапрограммирование
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 24.02.12 22:50
Оценка:
S>И какая по-твоему польза от мнимой параметричности первой функции? Может она стала типобезопасной? Где бенефит?

Эта функция инкапсулирует внутри себя ad-hoc полиморфизм, позволяя записывать более сложные параметрические полиморфизмы простым образом.

Например, Сnk можно записать так
T Cnk<T>(T n, T k)
{
  return Div(Factorial(n, k), Factorial(n - k));
}
T Factorial(T n, T k = One<T>())
{
  T result = One<T>();
  for (T i = k; Lte(i, n); Add(i, One<T>()))
  {
     result = Mul(result, i);
  }
  return result;
}

T Add<T>(T x, T y)
{
   return Operation<T>.Plus;
}
T Div<T>(T x, T y)
{
   return Operation<T>.Divide;
}
[...]
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.