LINUX.ORG.RU

Racket VS Common Lisp

 , , , ,


8

10

Добрый день дорогие аналитики L0R'a. Ковыряю ракет, пишу на нем клиентскую программу - а пока хочется вот что спросить. Все же что лучше - Racket или Common Lisp? Что более перспективно? Ну и естественно, какие у одного недостатки/преимущества по сравнению с другим?

Ответ на: комментарий от anonymous

Где вы этой ерунды набрались? Нет таких лисп-проектов, к сожалению. Да и не дает лисп таких преимуществ.

anonymous
()
Ответ на: комментарий от ebantrop

Ну и как же ты решишь описанную задачу (когда выбор метода зависит от типа трех разных сущностей) при помощи интерфейсов?

anonymous
()
Ответ на: комментарий от anonymous

Ну и как же ты решишь описанную задачу (когда выбор метода зависит от типа трех разных сущностей) при помощи интерфейсов?

В конце прошлого века фирма микрософт придумала GDI. Убого конечно, но работало довольно неплохо.

ebantrop
()
Ответ на: комментарий от ebantrop

И как же GDI связано с задачей выбора метода в зависимости от типа нескольких сущностей?

anonymous
()
Ответ на: комментарий от anonymous

типа нескольких сущностей?

Каких сущностей? Вначале речь шла про рисование кругов и треугольников на экране и бумаге. GDI это решал.

ebantrop
()
Ответ на: комментарий от ebantrop

Каких сущностей?

Да любых.

Вначале речь шла про рисование кругов и треугольников на экране и бумаге. GDI это решал.

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

anonymous
()
Ответ на: комментарий от monk

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

Не думаю, что для шарпа-явы дела обстоят хуже С++. Для питон тоже есть множество реализаций.

anonymous
()
Ответ на: комментарий от anonymous

Вариант Страуструпа реализует только маленький огрызок клосовских мультиметодов. Естественно, что он быстрее. Со свободным определением типов (как в CL, где типом может быть любой предикат) никакой константы быть не может. А если определение типов несвободно - то полезность мультиметодов резко падает.

anonymous
()
Ответ на: комментарий от anonymous

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

Вроде как полиморфизмом зовется. Или как отметил Антон ниже мультиметод.

ebantrop
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от ebantrop

Вроде как полиморфизмом зовется.

Полиморфизм позволяет делать диспетчеризация только по одной сущности.

anonymous
()
Ответ на: комментарий от anonymous

Ха ха, трусливые регистраты сбежали в talks делиться попаболью!

Не трусь, зарегистрируйся.

alienclaster ★★★
()
Ответ на: комментарий от anonymous

Не думаю, что для шарпа-явы дела обстоят хуже С++. Для питон тоже есть множество реализаций.

Так никто и не спорит, что МОЖНАСДЕЛАТЬ. На любом тьюринг-полном ЯП можно сделать все, что угодно. В том числе и лисп. И делают, что характерно - в соответствии с десятым правилом Гринспуна.

anonymous
()
Ответ на: комментарий от anonymous

И никому оно пользы не принесло

Если оно тебе пользы не принесло - не значит, что никому не принесло.

anonymous
()
Ответ на: комментарий от anonymous

Так предикат в качестве типа - это маразм. Пример пользы от этого можете привести?

Это частный паттерн-матчинга с гвардами. Соответственно - примеры паттерн-матчинга с гвардами.

А статические мультиметоды - это вообще смех, кстати. Они в стандарте с++ и так есть, с самого начала.

anonymous
()
Ответ на: комментарий от anonymous

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

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

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Если бы не идиотская статья какого-то лиспофана, я бы никогда не узнал о нем.

Ты в то время еще в мортал комбат на сеге мочился.

И никому оно пользы не принесло

Как это не принесло?! Сотни людей получили возможность открывать свои магазины в несколько кликов мыши. Еще тысячи получили возможность покупать товары, не вставая с дивана.

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от alienclaster

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

anonymous
()
Ответ на: комментарий от anonymous

Что не так?

Да, вот это.

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

Печально, что такие, как ты, до сих пор топчут эту бренную планету.

Поплачь и смирись.

anonymous
()
Ответ на: комментарий от anonymous

Так что, да, очередной штришок к ипанутости лиспанутых, спасибо за яркий образ.

Эдак тебя бомбануло! Видать в самое яблочко попало!

Маме с папой привет передавай.

anonymous
()
Ответ на: комментарий от anonymous

В параллельной вселенной?

Лол, мальчик, брось джойстик и учись пользоваться гуглом.

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

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

anonymous
()
Ответ на: комментарий от anonymous

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

Принципиальная-то разница в чем?

alienclaster ★★★
()
Ответ на: комментарий от anonymous

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

anonymous
()

Поздравляю лисперов с безоговорочной победой! Тяжёлая артиллерия из двух лисперов-анонимусов в корне изменила ход битвы!

anonymous
()
Ответ на: комментарий от anonymous
let rec private _gcl2departure (outs : Route list) =
    match outs with
    | [] -> [[]]
    | rs -> 
        (fun a (b : Route list) -> Some(a :: b))
            |> List.product 
                rs 
                (_gcl2departure 
                    (rs |> List.collect (fun (r : Route) -> r.outputRoutes)))

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

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

pseudo-cat ★★★
()
Ответ на: комментарий от alienclaster

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

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

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

Нет, не надо. С точки зрения общелиспа чтобы покрыть все кейзы - надо покрыть все возможные предикаты вообще. Это бред.

anonymous
()
Ответ на: комментарий от anonymous

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

Т.е. _принципиальных_ различий нет. Будут у тебя операции над типом раскиданы по define/match или по каким объектам - разница только в удобстве. И если исходить из разработки нового_типа, то в общем случае ф-ции, инкапсулированные в каком-то одном контейнере / модуле / пространствен, ассоциированном с этим типом - будет логичнее и удобнее. Это необязательно должен быть объект, да и паттерн-матчинга внутри такого контейнера никак не исключает.

alienclaster ★★★
()
Ответ на: комментарий от anonymous

Ну что за каша в голове? Ты же сейчас про ООП(вернее его реализацию в общелиспе), а не про ПМ.

anonymous
()
Ответ на: комментарий от alienclaster

Это принципиальное отличие. Я могу отнаследоваться от библиотечного класса так, чтоб функции этих библиотек могли гарантированно работать с моим объектом. В случае с ПМ - не могу. Это тоже самое, что сравнивать динамическую диспетчиризацию и свитч по тегу типа. Маразм. Я использую и виртуальные методы и ПМ в Scala. Каждый метод хорош для своих задач.

anonymous
()
Ответ на: комментарий от anonymous

Ха ха, трусливые регистраты сбежали в talks делиться попаболью!

Комменты доставляют:

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

trex6

Лол, да на ЛОРе лиспофлеймы бушевали еще тогда, когда ловсанчик в салки-приседалки во дворе гонял.

anonymous
()
Ответ на: комментарий от anonymous

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

Каждый метод хорош для своих задач.

Короче, мы друг друга поняли :)

alienclaster ★★★
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

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

Вообще-то все именитые Java-бои тут уже отметились. До и после.

Иди от сюда мальчик, кино-то уже кончилось.

anonymous
()
Ответ на: комментарий от anonymous

Это лисперы убогие тут резвиться могут и «победу» себе засчитывать

Лисперы получают автоматы по основным предметам, стрегут деньги с остальной массы одногрупников, будущих сертифицированных Java-разработчиков, за сгенеренные Лиспом варианты лаб, и занимаются своими стартапами, попутно тролля дяденек-тугодумов с ЛОРа.

anonymous
()
Ответ на: комментарий от anonymous

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

Кстати, если бы ты реально «занимался стартапом», то знал бы, что это минимум 100 часов в неделю и никаких быдлоров.

anonymous
()
Ответ на: комментарий от anonymous

минимум 100 часов в неделю и никаких быдлоров.

Ага, и закончится такой «стартап» в психушке. Один фиг надо ждать, пока подсознание хорошее решение родит. Погуляешь, поспишь, потроллишь - и оно тут как тут.

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Я вообще-то Грэма и Морриса взял за основу. Если ты и этих ребят не знаешь...

anonymous
()
Ответ на: комментарий от anonymous

Или ты насчёт пляжей? В Малибу девочки сёрфят - всё сходится.

anonymous
()
Ответ на: комментарий от anonymous

Наши лисперы из общаги не дураки. Ведь у них есть Лисп. В перерывах между просмотром ситкомов и поеданием пиццы, закинув ноги на стол, наши герои just for fun потихоньку превращают свои идеи в реальность. Что-то летит в корзину, что-то остаётся, из чего-то вырастают совсем неожиданные вещи. Мозг начинает работать в нужном направлении, налаживаются новые нейронные связи, вдруг озарение - и наши лисперы уже бегают с девочками по солнечным пляжам Калифорнии. Проект взлетел, улучшил жизнь тысяч людей по всему миру и был успешно продан.

(Тут лиспер очнулся от фантазий. Перед ним был экран с ЛОРом и недоеденная тарелка борща. Борщ давно остыл. На дворе стояла глубокая ночь. Скоро ложиться спать, ведь завтра первым уроком математика. Лиспер поставил на закачку очередной хентай и, пока хентай качается, решил ещё немного пофантазировать...)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.