Здравствуйте, VladD2, Вы писали:
VD>Для этого достаточно перегрузки. Метод Console.WriteLine так и делает. VD>Но вообще для этой задачи какраз метапрограммирование подходит хорошо. Но ты же говорил про вызов метода, а не про проверку соответствия списка параметров некому шаблону.
Не знаю Немерле, проверять лень.
Я не говорил, что метапрограммирование заключается в вызове метода, я говорил о том, что можно так заметопрограммировать например (есть много и других примеров) функцию foo от любого числа параметров любого типа, что ее вызов произойдет без синтаксического оверхеда.
При этом во время компиляции параметры будут проанализированы, возможно преобразованы и будет сгенерирована и вызвана некая функция из потенциально бесконечного семейства перегруженных функций. Да, это действительно перегрузка, но это перегрузка, когда, условно говоря, в 3-х строчках кода ты указываешь компилятору алгоритм генерации нужной функции в зависимости от типов и количества аргументов.
И это только один из многочисленных вариантов использования классов типов для метапрограммирования. Например, в typechecker полностью вкладывается арифметика (все это есть по ссылкам), далее везде.
Здравствуйте, lomeo, Вы писали:
L>Здравствуйте, geniepro, Вы писали:
G>>Впечатляет... G>>А что за limitations of typeclasses имеются в виду?
L>ХЗ. Язык не тьюринг полон? Я просто не помню как чёрчевские нумералы делятся.
рполон, но неудобен, там же написано — ugly code. по сравнению с тьюринг-машиной он даже в чём-то проще
Здравствуйте, BulatZiganshin, Вы писали:
BZ>Здравствуйте, lomeo, Вы писали:
L>>Здравствуйте, geniepro, Вы писали:
G>>>Впечатляет... G>>>А что за limitations of typeclasses имеются в виду?
L>>ХЗ. Язык не тьюринг полон? Я просто не помню как чёрчевские нумералы делятся.
BZ>рполон, но неудобен, там же написано — ugly code. по сравнению с тьюринг-машиной он даже в чём-то проще
Его фундепсы полным делают? Или достаточно мультипараметрических классов типов? Потому что у Haskell98 система типов, вроде, не полная.
Здравствуйте, deniok, Вы писали:
BZ>>рполон, но неудобен, там же написано — ugly code. по сравнению с тьюринг-машиной он даже в чём-то проще
D>Его фундепсы полным делают? Или достаточно мультипараметрических классов типов? Потому что у Haskell98 система типов, вроде, не полная.
Кстати, задачка (которую и полноту докажет )
Реализовать на типах S и K. (Можно и лямбду)
Re[5]: ФП и абстракция списка
От:
Аноним
Дата:
03.06.07 10:02
Оценка:
Здравствуйте, VladD2, Вы писали:
А>>Ну а в лиспе есть дженерики — позволяют "вызывать" методы, определённые вообще для чего угодно...
VD>Ну, вызови для массива car/cdr, если так.
И кто мне запретит в пределах моего модуля переопределить их как дженерики?
Здравствуйте, VladD2, Вы писали:
А>>Не совсем понятно, что именно тебе "надо"
VD>Если очень сило себе это внушать, то возможно. Похже, что остальные поняли все отлично.
Только судя по ответам каждый понял своё...
А>>На списках можно сделать почти всё (см. SICP).
VD>"Почти" это уже само по себе смешно.
Я намеренно написал "почти", дабы ко мне не приставали с "квантором всеобщности"
VD>Да и вопрос не в этом. Скажем действительно все можно выразить буквально 5-ю ассемблерными инструкциями где даже call в общем-то не нужен. Но речь то и дет об абстрации.
В лиспе мало средств для построения абстракций?
А>>"Чистую парадигму" ФП на чём излагать?
VD>Меня больше занимает другой вопрос. Имеет ли смысл вообще рассматривать ФП как отдельную прарадигму. Похоже, что в чистом виде она ущербна, и имеет смысл только в купе с некой иделогией типов которая в чистом виде имеется только в ООП.
А с какого ты "идеологию типов" наделил характеристикой "принадлжеит ООП"?
Re[13]: ФП и абстракция списка
От:
Аноним
Дата:
03.06.07 10:38
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Есть стандарты де факто. А Лисп хоть формально стандартизирован, но я не смог скопилировать половину приперов на разных компиляторах которые казалось бы поддерживали стандарт CL.
Хух, а примеры полностью соответствовали стандарту?
VD>Наличие единой реализации — это намного лучше стадарта. Отчасти потому Руби и Питон во всю использются на практике, а Лисп при пенесометрии.
Здравствуйте, VladD2, Вы писали:
А>> На списках можно сделать почти всё (см. SICP).
VD> "Почти" это уже само по себе смешно.
Да не почти, а просто всё — вопрос желания и фантазии.
В самой первой версии Лиспа Маккарти даже арифметику сделал на списках, без чисел. Типа, 0 — пустой список, 1 — список из одного элемента и т.д.
Другое дело, что это может быть не практично в реальном использовании...
Здравствуйте, BulatZiganshin, Вы писали:
L>>ХЗ. Язык не тьюринг полон? Я просто не помню как чёрчевские нумералы делятся.
BZ>рполон, но неудобен, там же написано — ugly code. по сравнению с тьюринг-машиной он даже в чём-то проще
Как же он полон, если вывод типов всегда должен завершаться?
Здравствуйте, lomeo, Вы писали:
VD>>Процесс вызова метода в IL выглядит так. Мы помещаем параметры возова в стек виртуальной машины. Далее указываем инструкцию call или callvirt. Затем мы указываем полную сигнатуру метода который хотим вызвать.
L>Прикольно, т.е. теоретически можно вывести и запихнуть,
Можно практически. Незнаю, только что значит "запихнуть".
L> но вот с полиморфизмом (когда от них зависят другие функции) уже не сработает,
Блин. Полиморфизм полиморфизму рознь. При перегрузке (overloading) используется статический полиморфизм. И только от устройства языка зависит можно ли перегружать функции по возвращаемому значению или нет. При переопределении (overriding) мы имеем один метод который просто физически не может возвращать разные значения.
L> потому что надо пихать сразу. Но хоть так, интересно.
Ничего не понял. Что куда надо пихать?
Еще раз. В C#/C++ не принято (стандартами языков) перегружать фукнции по возвращаемому значению. Для совместимости с ними другие языки зачастую выбирают ту же стратегию. Но ни к ООП ни к рантайму это отношения не имеет. А то кто утвреждает обратное просто профан и трепачь пытающийся сделать умное лицо (привет анониму).
VD>>Блин. Что-то я снова погряз в форумах. Пора нафиг от сюда валить .
L>А?! Кто здесь?
И главное, зачем?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, awson, Вы писали:
A>...И это только один из многочисленных вариантов использования классов типов для метапрограммирования. Например, в typechecker полностью вкладывается арифметика (все это есть по ссылкам), далее везде.
А почему для метапрограммирования используются не предназначенные специально для этого вещи?
Зачем все делать через зад? Сами же говорите, что тот же ТемплэйтХаскель (или что-то там) доступен всем. Так почему бы им не воспользоваться?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
L>> но вот с полиморфизмом (когда от них зависят другие функции) уже не сработает,
VD>Блин. Полиморфизм полиморфизму рознь.
Это неважно.
L>> потому что надо пихать сразу. Но хоть так, интересно.
VD>Ничего не понял. Что куда надо пихать?
VD>Блин. Полиморфизм полиморфизму рознь. При перегрузке (overloading) используется статический полиморфизм. И только от устройства языка зависит можно ли перегружать функции по возвращаемому значению или нет. При переопределении (overriding) мы имеем один метод который просто физически не может возвращать разные значения.
в ооп не может. с type classes может. я тебе уже раз 10 потворил, что у них разная семантика, а ты о type classes чисто с точки зрения синтаксиса судишь что это вроде как интерфейсы. вот и подумай, могут ли интефрейсы в c$ такое обеспечить
VladD2,
VD>Этот аргумент подходит только чтобы тебя забанить. Смысловой нагрузки он не несет.
VD>В общем, вопрос можно закрывать. Лично мне все стало полностью ясно. С этого времени я буду отровенно ражать над пропагандистами "чистого" ФП. Я и раньше предпологал, что чистый ФП — это вакуумный сфероконяра, а тепель я в этом просто уверен.
Твои посты в этом топике (увы, я всё прочитал) навевают только мысли подобные
Many a troll hath usenet seen,
none so fine as he hath been.
Feed him once, he's back for more,
calls himself a true Lisp whore.
Say "you fool", he says "I am!",
send him mail, he doth post spam.
Tell me, aged one of old:
Why oh why do they feed trolls?
A>>...И это только один из многочисленных вариантов использования классов типов для метапрограммирования. Например, в typechecker полностью вкладывается арифметика (все это есть по ссылкам), далее везде.
VD>А почему для метапрограммирования используются не предназначенные специально для этого вещи?
VD>Зачем все делать через зад? Сами же говорите, что тот же ТемплэйтХаскель (или что-то там) доступен всем. Так почему бы им не воспользоваться?
Неважно не то, что полиморфизм полиморфизму рознь, а то, что ты об этом говоришь — я указал, какой полиморфизм я рассматриваю.
Кстати, даже на уровне выражений вывести тип не всегда возможно из-за нестрогости типизации (в частности, неявного приведения).
L>>Точную сигнатуру в IL.
VD>Она в нем всегда точная.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Gaperton, Вы писали:
G>>То что есть в Хаскельном примере — это только полиморфизм. Зато какой! ОО отдыхает.
VD>Полиморфизм и инкапсуляция присутсвтуют в полном объеме.
Инкапсуляция не присутствует в полном объеме. Присутствует ADT. А это не одно и то же.
G>>>То что есть в Хаскельном примере — это только полиморфизм. Зато какой! ОО отдыхает.
VD>>Полиморфизм и инкапсуляция присутсвтуют в полном объеме.
G>Инкапсуляция не присутствует в полном объеме. Присутствует ADT. А это не одно и то же.