Это копия, сохраненная 17 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
{Основные диалекты}
:: Common Lisp - разрабатывался как промышленный язык, пригодный для широкого спектра применения, из-за чего имеет достаточно объемную спецификацию. Является мультипарадигменным (процедурщина, функциональщина, ооп (CLOS)), с сильной, динамической типизацией. Есть опциональная декларация типов и, в некоторых реализациях (sbcl, например), частичный их вывод.
Описание особенностей: http://habrahabr.ru/post/143490
Основные реализации:
- свободные: SBCL (нативный код), Clozure CL (нативный код), ECL (через сишку), Clisp (байт-код; небольшой размер образа; похоже, заброшен), Clasp (LLVM; ориентирован на интероп с C++), ABCL (байт-код JVM), gcl, cmucl
- коммерческие: LispWorks, Allegro CL, Scieneer CL, mocl (для программирования под ведро и ios)
:: Scheme - это минималистичный лисп, пригодный в основном для обучения, исследований. Наиболее практичными реализациями являются GNU Guile (https://www.gnu.org/software/guile/) и Chicken Scheme (http://call-cc.org/).
:: Racket - развитие PLT Scheme. Racket включает в себя много подъязыков (typed racket, lazy racket, frtime racket, Scheme стандартов r5rs и r6rs).
:: Clojure - cм. соседний тред.
{Scheme}
::: Учебники
- SICP :: https://mitpress.mit.edu/sites/default/files/sicp/index.html
- The Scheme Programming Language (R6RS) :: https://www.scheme.com/tspl3
- Практика :: https://exercism.io/my/tracks/scheme
::: Документация
- http://web.mit.edu/scheme_v9.2/doc/index.html
::: Остальное
- https://github.com/theodesp/awesome-scheme
- https://github.com/schemedoc/awesome-scheme
{Racket}
::: Учебники
- HtDP :: https://www.htdp.org/
- Racket Guide :: https://docs.racket-lang.org/guide/index.html
- Beautiful Racket: https://beautifulracket.com/
- Остальные :: https://racket-lang.org/books.html
::: Документация
https://docs.racket-lang.org/
::: Библиотеки
- https://github.com/avelino/awesome-racket
- https://pkgs.racket-lang.org/
::: Среда разработки
- DrRacket :: https://docs.racket-lang.org/drracket/
- Online :: https://www.jdoodle.com/execute-racket-online/
{Common Lisp}
::: Учебники
- Cookbook :: https://lispcookbook.github.io/cl-cookbook/
- PCL :: http://lisper.ru/pcl/
- OnLisp :: http://www.paulgraham.com/onlisptext.html
::: Документация
- http://www.lispworks.com/documentation/HyperSpec/Front/index.htm
::: Библиотеки
- https://github.com/CodyReichert/awesome-cl
- http://quickdocs.org/
::: Среда разработки
- Portacle :: https://portacle.github.io/
- Остальные :: https://lispcookbook.github.io/cl-cookbook/editor-support.html
Предыдущий тред покоится на дне тут: https://2ch.hk/pr/arch/2017-09-01/res/1003393.html (М)
Есть поговорка "Труд не уходит в песок"
Вкатывайся во все подряд, забивай, опять вкатывайся. Перманентно все в голове не удержишь, но наверстать заново то, что когда-то проходил будет легко.
>А че тебя на лиспе так понесло, если
Я думал лиспы сделают меня умным. Но инструмент не может сделать тебя умным. Он может лишь облегчить твою работу. Теперь я это вижу.
>Бери какой-нибудь кхм кхм Питон++ и хуярь
Плюсы это же совсем про другое. Я думал попробовать байтослесарьство, но плюсы выглядят огромными. Мне страшно туда лезть.
>>591693
>Есть поговорка "Труд не уходит в песок"
Но ведь я уже потратил время, которое не принесло пользы.
> но наверстать заново то, что когда-то проходил будет легко.
Только если я захочу вернуться обратно. Но я пока не могу найти серьезной причины тратить время время на лиспы. Работы нету, даже на кложе. Про остальные лиспы вообще молчу.
Лисп проиграл мейнстрим языкам и платформам, но это не означает, что его нельзя использовать в каких-то своих проектах.
Потому что лисп не пользуется популярностью. И что это такое - популярность на гитхабе? Сама по себе она не стоит ничего. Что ты имеешь в виду?
Если ты про коммон лисп, то скорее нет, чем да. Кложа активно используется очень многими компаниями, схема активно используется в академической среде и во всяких исследовательских проектах по проектированию языков.
https://github.com/lexi-lambda/hackett
>github
В чем смысл это проекта? Потролить хаскелистов? Я думал, жизнь их достаточно потрепала.
Тебе и жсеров не жалко, пчел.
Ставь IntelliJ IDEA. Поверх накатывай Cursive плагин. Бери книжку по Clojure и начинай писать код. Сложно себе представить более прагматичного лиспа чем Clojure.
Импорт в CL да, странноват, но нужно понимать, что это вещь, сделанная в конце восьмидесятых, и ничего подобного в других языках не было вплоть до середины двухтысячных. Там просто достаточно запомнить странные называния ("пакет" - это то, что в других языках "модуль", а "система" - это то, что в других языках "пакет"), внимательно прочитать ридми к QuickLisp и всё встанет на свои места. Я когда PCL читал, тоже на всех этих пакетах запнулся, да так, что аж на несколько месяцев отложил, но потом вернулся, осилил, и теперь охуеваю оттого, насколько же коммон лисп прекрасен (хотя местами и уродлив).
Ракетка хорошая, но тормозная и на мой вкус слишком перегружена фичами.
Кложу не трогал, ничего про неё сказать не могу.
Мой тебе совет - вернись к CL, базарю, ещё захочешь.
>Ракетка хорошая, но тормозная
Эт неправда. Ракет довольно быстрая схема, кроме того, есть typed/racket когда нужно максимум скорости.
Серьездно, я бы забил на любые другие языки навсегда если бы типизированный ракет допили ли бы.
>и на мой вкус слишком перегружена фичами
Стандартная библиотека(если это так можно назвать) в нем - бардак.
>Эт неправда. Ракет довольно быстрая схема, кроме того, есть typed/racket когда нужно максимум скорости.
Сосёт у стального банка и оба сосут у жабоскрипт v8, все вместе дружно сосут у .net
>А что еще не допилено для постижения сатори?
Ну он как минимум житель второго класса. Часть стандартной библиотеки так на тайпед ине переведена. Плюс баги всякие, например полгода не работал дебаг.
>>592162
>Ага 10й, последний тред утонул джва года назад (ДЖВА, КАРЛ!)
На борде остались одни тралли шкальники и фсбешники.
В РФ собираются новый закон принять об административной ответственности за РЕПОСТ ИЗ НЕЗАРЕГИСТРИРОВАННЫХ СМИ.
Кинеш ссылочку на реддит например, плати штраф, и на карандашик тебя.
Двачую. Это же тред контрамотов, тут чем позже был последний коммит - тем лучше.
Такие большие проекты как граф движок почти что нельзя довести до точки, всегда будут какие-то проблемы, или улучшения, тем более что тот-же опен жл развивается.
Скорее всего просто никто не пользуются этим.
Ору со школьников-неосиляторов, которые думают, что лисп - это хороший инструмент для каких-то задач. Нет, пора уже признать, что лисп - это лучший язык для любых задач, кроме, разве что, низкоуровневых вещей, для которых есть сишка и асма
Никитонский уже давным давно размотал твой лисп на примере "невероятного" Кложэ, который всосал Расту на раз-два по производительности.
Жаль только С пропускает эти сеансы минета из-за того что по пути стреляет в ногу сегфолтом и потом отлеживается в больничке.
Я для автокада плагины писал на лисп.
Где?
Лисп это хороший язык для запилить себе временных велосипедных тулзов когда в твоей области ничего подходящего нет - всякие дсли-хуели, парсеры-хуярсеры.
Проблема же в том, что когда появляется нативное промышленное решение, то лишп резко нафиг становится не нужен.
https://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
Так что лисп - это БЫЛ такой вспомогательный язык для запила временных велосипедов, который уже стал эту роль петону и стал ископаемым говном мамонта.
Сейчас не 80-е и парсить васяноформаты не нужно
>However, they have since resumed using it for scripting on some PlayStation 3 games, including The Last of Us.[3]
2013 год. Лисп используют для скриптинга ААА игры продукта, не хотел?
Начни с ассемблера если еще не знаком. Хоть вводный курс.
Дальше Паскаль, или Аду.
Учи аду, программируй самолёты, профит.
бля, нахуй в живого человека сразу ассемблер засовывать? ты поехавший? мож, блядь, писсать хеллоуворлд, или алгоритм Евклида, держа в голове, как процессор достаёт кэшлайны из памяти, интепретируя виртуальное адресное пространство, и засовывая инструкции в конвейер АЛУ? или, блядь, лчше сначала нормально замести под ковёр сложности, понять, что такое циклы там, переменныйе, операторы присваивания, масивы?
На кложе красиво и быстро строить абстракции, как и на любом лиспе, а js говно по определению
Знаешь, есть такой производитель электроинструмента и промышленного оборудования Hilti. Очень крутая продукция у них. Удобная, надежная, дают пожизненную гарантию. В общем элитное оборудование. Почему бизнес в РФ массово не юзает их оборудование? Потому что дорого, потому что невыгодно, нет смысла. Спецов хороших мало, а васяну дай такую игрушку, он может ее и сломать. Владельцам бизнеса в большинстве же похуй на каком оборудовании работают люди. Им важен результат. Результата можно добиться и с худшим оборудованием. Ну да, оно будет чаще ломаться, оно не позволяет так быстро и удобно работать. Но оно решает задачу в общем. Тоже самое и с Лиспами.
Не каждый понимает их ценность. Не каждый умеет их использовать. Не каждый бизнес готов их юзать. Тот кто ценит свой труд, кто знает ценность и умеет использовать сильные стороны Лиспа, тот юзает их. Есть правило, которое сейчас очень хорошо работает, все что массовое == говно. И даже мнения людей. Чем больше людей имеют какое-то общее мнение, тем выше вероятность, что это их мнение дикий треш. Массовое поклонение псевдо-ООП - треш. Массовые языки - почти все говно. Принятые подходы к программированию в индустрии - почти все хуета, не имеющая ничего общего с инженерным мастерством. И наоборот. Все незаметное, все не распиаренное, все редкое - обычно качественное, верное, правильное.
Ты слово Лисп в каком возрасте впервые услышал?
>Дай угадаю, судя по твоему максимализму, ты не старше 14 лет?
Есть что возразить по теме поста? Если нет, то досвидания. Не собираюсь с тобой обсуждать свою личность. Может твою обсудим?
>Может твою обсудим?
Давай. Я в универе на первом курсе был таким же как ты, слушал музыку, от которой у посторонних уши сворачивались в трубочку, люто-бешено ненавидел всё, что не компилируется в нативный код и зачитывал одногруппникам вслух копипасты про то, что жаваблядь не человек. Теперь, после десятка лет работы за деньги, я растерял весь максимализм и стал прагматиком, на чём быстрее всего сделать хуяк-хуяк-продакшен, на том и пишу на питонах в основном, на коммон лиспе для души лабаю.
> пиздец какой огромный
Это не так. Да, документ со стандартом чуть меньше, чем документ со стандартом C++, но в CL минимум базовых принципов - s-expr'ы, макросы, вот, считай и всё по большому счёту.
> выхлоп меньше или на уровне мейнстрим языков?
Это не так. Мейнстрим-языки так до сих пор толком и не смогли спиздить из CL символьный тип данных, гомоиконность и макросы.
>но в CL минимум базовых принципов - s-expr'ы, макросы
Я не спорю, синтаксис минималистичный. Но та же стд либа просто огромная. Клос огромный. Начнешь писать что-то сложнее хелоу ворлда придется вкатываться в либы, таже александрия. Захочешь оптимизировать и задеплоить свое поделие - придется разбираться в апи конкретных реализаций. И я вот думаю, а стоит ли оно того? Когда в других языках порог входа на порядок меньше, батерейки на все случаи жизни и комьюнити в разы больше.
>Мейнстрим-языки так до сих пор толком и не смогли спиздить из CL символьный тип данных, гомоиконность и макросы.
И вряд ли смогут, потому что дизайн языков другой
> Но та же стд либа просто огромная.
Кришна с тобой, в CL стдлиба чуть продвинутее, чем в чистой сишке. Чуть нужно что посложнее - приходится тащить третьесторонние либы.
> Клос огромный.
Чего в нём огромного? defclass и defmethod? Серьёзно, клос - это самый изящный ООП, который я когда-либо видел, а я только за деньги писал на полудюжине языков, а посчитать те, что для души - так и дюжина наберётся.
> Захочешь оптимизировать и задеплоить свое поделие
И для этого есть решения - многочисленные trivial-* библиотеки, унифицирующие разницу в реализациях, для деплоя можно взять тот же самый шинмеровский deploy. С деплоем того же распиаренного пистона ты насосёшься гораздо больше хуёв.
> Когда в других языках порог входа на порядок меньше
Не питай иллюзий, что в CL, что в мейнстримные языки порог входа примерно одинаков, если не считать JS, вот это вообще ёбаный ад, заборы и коровники.
> И вряд ли смогут, потому что дизайн языков другой
Amen to that. В руби вроде были какие-то потуги, но вроде бы всё равно не дотягивает до CL.
>Мейнстрим-языки так до сих пор толком и не смогли спиздить из CL символьный тип данных, гомоиконность и макросы.
Очевидная кложа очевидна.
Алсо макросы в принципе есть во всех вменяемых новых языках (раст...) - они конечно поубищнее в разы, но в принципе задачу свою кое-как решают.
Потому что для того, что бы писать промышленный софт всех это нахуй не нужно, вот лисп и сдох
>Захочешь оптимизировать и задеплоить свое поделие -
У тебя есть возможность прямо в рантайме лично поковыряться ручками в JIT компиляторе и добавить все необходимые AVX-инструкции и правила их использования.
https://github.com/sbcl/sbcl/blob/master/src/compiler/x86-64/insts.lisp
Да нет, просто сытые кекогерцы и гигабайты оперативы тогда еще не изобрели, движение на сервер тогда еще не было - было наоборот - с сервера, который мейнфрейм на персоналки.
Java твоя в 2010 умерла, все на лисп переходят, в том числе и тырпрайз. Я еще помню как на днях был на конференции (работаю в крупной компании over3000 сотрудников), решаем вопрос об архитектуре системы. Мои коллеги че-то пиздели про хайлоад и плюсы, но у меня уже было пару козырей в рукаве. Так что я встал и говорю - все хуйня, ребят, в 2к20 все четкие пацаны на лиспе хуярят, так что давайте выбросим весь тот зашквар, на котором сейчас пыхтит продакшн. Смело заявления, но оно сработало. Пол бюджета тупо вылили на переписывание инфраструктуры на всякие лиспы, каждый прогер выбирал свой любимый диалект и на нём писал, даже босс подключился и сказал "Бля какой хуйней мы занимались, вот где живет дух старой школы, пацаны".
На кложатв полно выступлений от хуйов с реальными проектами
В основном это хайлоад тырпрайз ориентированный на дата процессинг
Как пример swarmify и amperity
Самое смешное, что практически все из них начинались как стартапы и брали рандомных хуев (хоть в основном и связанных с жабой) и студентов без опыта лиспа вообще
Путь проекты и не разрослись до мегакорпораций, но свою нишу занимают и до сих пор на плаву по 5+ лет
Жаба скрипта на столько отвратительна, что это грустный мем. Я хз сколько раз пытслася в жс, но через пару часов из за блевоты уже монитра не видно. Так что клжс вполне себе выход.
Ну такое, все равно придется с головой погружаться в говно жсную инфраструктуру. Но хотя бы с языком меньше хуйни, тут да.
Начал читать beautiful racker, понравилась идея придумывать свои языки и дсл. И делать это удобно, потому что есть либы. Как с этим обстоят дела в борще?
А мне харчо больше нравится.
>Как с этим обстоят дела в борще?
В хаскеле что ли?
Фишка именно рэкета как раз в том, что это по сути фреймворк для написания своих языков. Но с дслами и в кл все ок, можно даже синтаксис свой через ридер-макры захуяривать (но ненужно). Алсо в схеме (и ракете) макросы гигиенические, в кл - нет, можно в них делать все что угодно.
>В хаскеле что ли?
В общелиспе же.
>рэкета как раз в том, что это по сути фреймворк для написания своих языков
Есть ли такой же фреймворк в кле? Похоже что нет
Хочу написать парочку языков под свои задачи, как это в книге beautiful racket расписывали и подумал, а можно ли сразу в кле такое проделать. Про дсл в курсе но имхо для этого потребуется много усилий, а в рекете похоже это делается очень легко.
>Есть ли такой же фреймворк в кле?
Какой? Что именно тебе нужно?
>подумал, а можно ли сразу в кле такое проделать
Да, можно.
Забудь, просто возьму ракетку и буду на ней писать, к черту кл. Когда-нибудь, я, возможно, вернусь к нему.
>слушал музыку, от которой у посторонних уши сворачивались в трубочку
Теперь это тред такой музыки
https://youtu.be/o6xXfYK8-c0
Мог бы, но какая принципиальная разница между формошлёпством крудов за деньги, которым я сейчас занимаюсь, и разработкой драйверов за деньги? Я и сейчас, когда на CL пишу, с интересом заныриваю в выхлоп (disassemble) и оптимизирую потом запах такой, что аж обои от стен отклеиваются
>>636286
>Когда-нибудь, я, возможно, вернусь к нему.
Ага, как только тебе понадобится хоть какое-нибудь быстродействие. Серьёзно, ракетка хорошая, но тормозная очень.
> ракетка хорошая, но тормозная очень.
Быстрее питонов, руби, пхп. Медленнее ноды. Среди скриптовых не худший вариант. Кл в другой категории все таки.
Не хочется выковырять глаза ложкой, глядя на нетривиальный код.
Вот факториал на хаскелле:
factorial 1 = 1
factorial n = n × (factorial (n × 2))
Как подобною монотонность реализовать на лиспах? Мне эта хуйня позарез нужна.
Оно, кстати, даже оптимизируется заебато (уж не знаю, как там с этим в этих ваших хаскелях)
Не то. Мне нужно монотонно распределить одну функцию на несколько тел, а не делать все в одном теле. Как в хаскелле или прологе. Другой пример, чтобы понятно было.
Допустим есть функция transform:
(define (transform 'foo) 'bar)
(define (transform 'bar) 'foo)
Вызываем: (transform 'foo)
Ожидаем в консоли: 'bar
Код выше почему-то выдает ошибку.
Такой способ мне неивестен, в CL у функции всегда ровно одно тело. Конечно, всегда есть возможность изобразить макрос, который будет вместо defun и который будет матчить аргументы и вызывать нужную суб-функцию, но это уже из разряда троллейбуса из буханки хлеба.
А, хотя стой, можно же что-то такое изобразить на дженериках. Не уходи никуда, сейчас напишу.
1280x720, 0:51
> Оно, кстати, даже оптимизируется заебато (уж не знаю, как там с этим в этих ваших хаскелях)
ГДЕ AVX ИНСТРУКЦИИ ПОКАЖИ ТКНИ
>factorial 1 = 1
>factorial n = n × (factorial (n × 2))
На каждый паттерн создаются новые переменные
Уже пару лет как в компилятор добавили депрекейтет варнинги по этому поводу
БЛЯТЬ СПАСИБО Я ВТОРУЮ НЕДЕЛЮ НЕ МОГ НАЙТИ
Просто как-то странно наверное вкатываться в программирование с программирования операционной системы...
А куй его знает, я не вкатывался
Ладно, похуй, все в этом мире относительно, и все человекочитаемые принципы условны. У всего есть мера и предел. Без дефайнов не обойтись. Будьте честны сами с собой и живите в гармонии. Пис.
Просто жизнь слишком коротка, чтобы бомбить, анон. Я это внезапно осознал. И тебе того же желаю, если еще не... на что я надеюсь
Этот факт мне уже давно понятен, просто твой первоначальный бомбёж выглядит как нечитаемая шиза
Bump
алсо потом на этом думаю ОСь написать, но это уже будущее хуй знает как the world will turn.
1. Прочитать ман имакса / банально научиться самым базовым функциям, понятиям по типу point & mark, buffer, modeline, etc.
2. Прочитать An Introduction To Emacs Lisp (Можно прям из имакса, M-x info и там ищеш)
3. Практика
4. Прочитать наконец полный ман по елиспу
5. Практика.
Я вас поздравляю....
Заебись, пиши. Всё равно stalin Сискинда по быстродействию хуй ты переплюнешь.
Я бы ещё Mastering Emacs посоветовал.
Пруфы, давно хотел найти работу
чел, с паскаля надо начинать, а уже потом переходить на асм, т.к. новичка кидать в асм это маразм а в паскале есть норм указатели. После асма С а потом можно и по лишпам пройтись.
>новичка кидать в асм это маразм
А как диды компьютер изобретали, ты дурак? Они ж тогда и алгоритмов не знали, и паттернов-хуятернов, но как-то же писали на своих EDSAC и не жаловались
подзалупный творожок
Я вкатился в ракет побольше твоего. Можешь задавать ответы.
Идея длц интересная но я этим ещё ни разу не пользовался. Написал пару утилит для себя.
Двачую. Постмодерн как он есть.
Точно чет я протупил.
>>643882
>Не то.
Почему?
>Мне нужно монотонно распределить одну функцию на несколько тел, а не делать все в одном теле.
Тебе чисто визуально важно это, или как?
Тут макросик как бы очевиден.
В ракетке есть (define/match как бы)
Если тебе именно нужно несколько дефайнов, то ты можешь свой собственный define сделать. Который соберет несколько определений в define/match
Я думаю это просто. Может кто-то и написал уже.
Моментально вообще.
В лиспе синтаксиса то и нету как такового.
Скобочку открыл, имя функции, параметры, скобочку закрыл.
Ну, ты неправ. Нотация-то другая.
Как быстро ты привыкнешь читать на русском, если все предложения будут строиться задом наперед, например.
быстро. что, думаю Не
Привыкнуть писать и могу.
Говоришь что-то такое ты.
Выучил раза с первого лисп был ребёнком я когда.
На 1вом вроде курсе нам лисп дали, вообще без проблем зашло, там ещё примеры были прикольные.
Нотация хуяция.
Вот с прологом было посложнее немного. Но тоже ничего военного.
А за неделю к чему угодно можно привыкнуть.
Мне на одной работе нужно было статистический анализ писать на червеДСЛ который без макроязыка помоему даже не Тьюринг полный. Ничего, привык.
А лисп как раз естественный путь вычислений показывает.
Ты буквально алгоритм на нем прямо записываешь.
>Ты буквально алгоритм на нем прямо записываешь.
Мы не мыслим алгоритмами, поэтому писать ast неудобно. И популярность лиспа и это доказывает, с этим странно спорить.
При решении арифметической задачи ты не рассуждаешь, как - надо разделить сумму четыреъ и семи на два. Ты скорее думаешь как, к четверке прибавить семерку и разделить на два.
Я очень рад, что ты весь такой способный, молодой и шутливый и все тебе легко. Но на деле, если ты будешь объективен, то людям ни логическое, ни каноническое функциональное, ни аст-подобное - не удобно. К нему именно что надо привыкать. А к императивному привыкать не надо. Оно естественно.
Ого, вот это тебя разнесло. Какбудто ты на лисп обиженный чем-то. Лисп очень много где успешно применяют.
И твоя способность читать мои мысли поражает конечно.
1. Человек может менять способ мышления как угодно. Поэтому он и человек. Смотреть уровни обучения по Бейтсону.
2. Способ записи арифметики из 3тего класса младшей школы не есть истинна. Система школьного образования была созданна для превращения сельских дебилов в боеспособную военную единицу.
>алгебраическая нотация
>Способ записи арифметики из 3тего класса
>моментально транслирую формулу на лисп, тому що в голове у меня СТЕК
Или тролль тупостью в другое место.
>как угодно
Нет, не может. Как бы хорошо ты не выучил английский, на русском все равно будет удобней говорить. Со школьной нотация аналогично - у тебя под неё сформировался мозг, когда ты ещё был пиздюком. А все, что формируется в детстве - оно обычно не обратимо.
Вот, погляди, множество лисп программистов даже после нескольких лет дрочки языка вполнеисогласны с тем, что в человеческой нормальной нотации код легче читать
https://readable.sourceforge.io/
Ни разу не видел, чтобы кто-то из лисперов всерьез использовал такие штуки.
Бтв писал в вузике интерпретатор лиспа с такой нотацией как язык запросов к табличкам.
>Нет, не может. Как бы хорошо ты не выучил английский, на русском все равно будет удобней говорить. Со школьной нотация аналогично - у тебя под неё сформировался мозг, когда ты ещё был пиздюком. А все, что формируется в детстве - оно обычно не обратимо.
Не подтверждёно ни одним вшивым студенческим исследованием, зато эмпирически дохуя примеров обратного, когда люди со временем забывают родной язык к хуям.
Так сразу бы сказал, что ты в жопу долбишься
>Не подтверждёно
Очень толсто.
То есть, как я понял, даже за весь срач не сподобился высрать чего-то более умного, чем просто виляние жопой, так что иди нахуй.
Я мимо проходил, деб
>Очень толсто.
Очень толсто утверждать обратное. Неси доказуху, посмотрим.
хуя, пентипл правды
>А к императивному привыкать не надо. Оно естественно.
Какой пиздец. Не, ну если ты ебаный робот, то возможно.
Меня наоборот от императищины коробит, настолько она неестественной для человека кажется. Я когда первый раз на уроке информатики в школе увидел i = i + 1 - просто охуел от этого бреда. Мне кажется это нормальная реакция, и нужно реально пройти через несколько лет отупления посредством программирования на энергичной мутабельной процедурной параше с аппликативным порядком вычисления, чтобы деградировать до уровня "императивного мышления", если такое конечно вообще возможно. Может быть программирование на иммутабельном ЯП с ленивостью, каррированием по умолчанию, pointfree, чистотой и поддержкой денотационной семантики сможет сделать из такого овоща обратно человека, но не уверен. Лучше процедурную парашу всё же обходить стороной.
>Я когда первый раз на уроке информатики в школе увидел i = i + 1 - просто охуел от этого бреда
Ну тогда у тебя задержка развития, если ты начал программировать после уроков информатики
Программировать лучше вообще не начинать (особенно на императивной параше) (особенно для кого-то за деньги), но если это неизбежно, то чем позже - тем лучше.
Удваиваю.
Люди думают как минимум - "прибавить к х 1", или "сложить а и б".
х плюс один минус два - это олигофрения.
Да понятно, что если ты шизик с борд, главное это пиздеть на бордах свои шизотемы
Тут моих два поста, один из которых ответ на ответ на первый, так что не семенство.
>>713125
>главное это пиздеть на бордах свои шизотемы
Какие, например?
>>712751
У меня есть работа программистом (к сожалению, гордиться тут нечем, лучше скрывать). Но намного лучше получать деньги более вменяемым способом, а программировать дома в качестве хобби. Как тут кто-то недавно точно подметил, программирование за деньги - это говно. Разница лишь в уровне вонючести, например, программирование в модном проекте на ClojureScript/Elixir лучше, чем пердолинг тырпрайзо-говна в банке/бадишопе на аутстаффе на жабе, но хуже возможности запиливания конкурентно-ориентированных языков с матином-лофом и автоматическим доказательством корректности на деньги налогоплательщиков.
Можно ли на них обучать нейронные сети и вообще работать с машобом?
>Всё вообще.
Байтоёбство доступно только на зачаточном уровне, и только в Common Lisp. Или нет?
>Какие, например?
Всё ФП это одна большая шизотема, точнее манок для аутистов, типа судоку или каких-нибудь наполеоновских войн.
Частично соглашусь, но писать на ФЯ вполне себе можно и это намного комфортней, чем на ОО-языках.
Тут скорее зависит от степени упоротости на определенных темах, типа программирования на тайплевеле, ссылочной прозрачности и т.д. так что для программирования времени не остаётся. Тут два варианта. Либо человек изначально не хотел программировать, ему просто нравится манипулирование значками/символами, а в математику, матлингвистику или професиольный компсайнс не смог. Либо второй вариант, человек работает программистом, но так как коммерческое программирование - это тупое и однообразное занятие, а каждая новая задача похожа на предыдущую как две капли воды, то программист, чтоб не помереть со скуки, начинает развлекать себя всякими обобщениями, систематизацией и прочими играми с абстракциями, что сопряжено с поиском новых концепций, выразительных средств и соответсвенно изучению новых языков. Заполучив в руки какой-нибудь хаскель с его богатым внутренним миром, человек начинает в него проваливаться, так как процесс повышения уровня обобщения и формализации - в общем-то бесконечен (когда потенциал хаски будет исчерпан, дальше пойдёт Идрис или любой прувер модный в этом сезоне). При этом обычное рутинное программирование на жабе в лохусофте теперь вызывает ещё большее раздражение, потому что совершенно не подходит для абстрактного мышления, которое теперь ещё и наполнилось новыми понятиями. Раздражение не позволяет нормально работать, а вымешать его надо, поэтому вместо быдлокодинга очередной CRM на работе или абстрактного ассоциативного кластера метапарадигм дома, человек срется на мейлачике рассказывая ОО-индусам и байтоебам что они все быдло, а из языки - говно.
Пруверы - хуюверы.
1)Язык - это инструмент, сами по себе эти пердоли ничего не дают.
2)Сколько не ебись, а вебер, который максимум ходит в бд под нескучными обертками и распределенными роутами из своего модного фреймворка в итоге по соотношению зарплата -> умственные затраты выигрывает.
Если хочешь НАУКУ, то надо лезть в программирование в последнюю очередь.
А какой ты из двух вариантов?
>При этом обычное рутинное программирование на жабе в лохусофте теперь вызывает ещё большее раздражение, потому что совершенно не подходит для абстрактного мышления, которое теперь ещё и наполнилось новыми понятиями.
Разве новые понятия не помогают лучше решать старые задачи?
Discuss.
Но ведь ML - не ответвление Лиспа, это самостоятельная ветвь в построении ЯП.
Первые реализации ML были прямым ответом на проблемы, существовавшие в Лиспе из-за динамической типизации.
Если программа большая, то сложно уследить, что функциям передаются параметры верных типов. Этого можно избежать, если совершать проверку типа на каждый чих... чем ML автоматически занимается еще на этапе компиляции.
Вот исчо: https://ru.wikipedia.org/wiki/TypeScript
Лисп ради ML AI-разработки и затевался.
>>736172
>Если программа большая, то сложно уследить, что функциям передаются параметры верных типов.
Это популярная легенда, которой статико-дебилы пугают друг-друга как бабайкой. Разумеется ничего кроме статико-параши и хеллоу-ворда на питоне они не видели, но легенду нужно поддерживать, чтобы как-то оправдать свой анальное рабство у тайп-чекера.
>чем ML автоматически занимается еще на этапе компиляции.
Сейчас бы тащить целую нейронку ради предсказывания типчиков, когда можно обойтись обычным тайп-чекером.
>Если программа большая, то сложно уследить, что функциям передаются параметры верных типов.
Зачем за этим следить, если лисповый рантайм делает это за тебя?
>>чем ML автоматически занимается еще на этапе компиляции.
>Сейчас бы тащить целую нейронку ради предсказывания типчиков
Бля, это очень смешно
Лучший троллинг тупостью за всё время существования доски, ящитаю.
https://ru.wikipedia.org/wiki/ML
Ну а кто ж знал что ты про эмэль, а не про машин лёрнинг.
Но в каком месте эмэль ответвление лиспа - непонятно.
Вот это: >>736637
писал не я.
ML настолько же потомок Лиспа, насколько C потомок Алгола. Надо учитывать, что в 70-е лисп еще не ассоциировался со скобками. В частности, Маккарти все продолжал планировать реализацию этих чёртовых M-expessions.
В англовикипедии написано про ML (правда, без указания источника)
It has roots in Lisp, and has been characterized as "Lisp with types".
Вот довольно неоднозначная цитата из The Definition of Standard ML
The full definition of this first version of ML was included in a book [19]which describes LCF, the proof system which ML was designed to support.The details of how the proof application exerted an influence on design is reported by Milner [39]. Other early influences were the applicative languages already in use in Artificial Intelligence, principally LISP [36], ISWIM [28] and POP2 [10].
Указанные ISWIN и POP2 находились под сильным влиянием Лиспа.
> пользуетесь ли вы емаксом?
Конечно.
> Вас самих не выворачивает с того, что он такой ублюдский?
ELISP-то? Ну не фонтан, конечно, но уж точно полущ viml-я или, прости г-ди, json-а, которым конфигурируются хипстерские поделки типа сублима.
Попробуй в Pharo пописать на Smalltalk, там, говорят, всё чудно интегрировано в IDE.
Из общего у ML и LISP только то, что их оба пытались применять для автоматического доказательства теорем.
Пошути эту шутку ещё дюжину раз, она от этого станет только смешнее!
>Но в каком месте эмэль ответвление лиспа - непонятно.
Лямбда-выражения.
Предпочтение рекурсии над итерацией.
Удобная работа со списками.
Минимальная необходимость указывать типы.
Возможность писать полиморфные функции.
Функторы как гигиеничные макросы.
Сборка сора.
Интересно, спасибо.
> Функторы как гигиеничные макросы.
Можешь вот этот пункт прояснить? Хоть на лиспе, хоть на ML.
Функтор возвращает определение, которое зависит от параметров:
functor MakeCompiler(structure C:CODEGEN and A:ASSEMBLER) : COMPILER =
struct
--здесь как-то используются C и A
end
Вызов функтора похож на применение макроса:
structure X86Compiler = MakeCompiler(structure C = X86Codegen and A = X86Assembler)
вместо
structure X86Compiler =
struct
... X86Codegen ...
... X86Assembler ...
end
>Лямбда-выражения.
>Предпочтение рекурсии над итерацией.
>Удобная работа со списками
>Возможность писать полиморфные функции.
>Сборка сора
Ну так у тебя любой ФЯ будет ответвлением лиспа.
>Возможность писать полиморфные функции.
>Сборка сора
А это вообще где попало есть.
>Минимальная необходимость указывать типы.
Не нужно путать динамическую дрисню и статически типизированный язык с Хиндли-Милнером.
>Ну так у тебя любой ФЯ будет ответвлением лиспа.
Для конкретики сравнил ML-и с Lisp-ами.
>Не нужно путать динамическую дрисню и статически типизированный язык с Хиндли-Милнером.
Ну кстати на уровне реализации ML сохраняет динамическую типизацию: чтобы работал полиморфный =, чтобы отличать [] от nil, и ради GC.
>>738646
Возвращает программу, а не данные.
Даже и не поспоришь.
>Ну так у тебя любой ФЯ будет ответвлением лиспа.
На момент 70-х (когда эмель и появился) эти особенности, ныне характерные для ФЯ, были практически эксклюзивными для лиспа. Так что да, получается любой ФЯ является потомков лиспа. Ты ведь читал Recursive Functions of Symbolic Expressions and Their Computation by Machine?
Кстати, а JS очень часто рассматривают как Scheme с алголоподобным синтактисом (да и Питону достается).
Каждый современный ЯП является в некоторой мере потомков алгола, в некоторой мере потомков фортрана и в некоторой мере потомком лиспа.
> емакс именно как терминалчик и применяется, ну и как шелл
что ты несешь?
> ебучий елисп, ну что это за хуйня ебаная. Вас самих не выворачивает с того, что он такой ублюдский
именно elisp "ублюдский"? Да норм, на самом деле. После CL немного непривычно было. А сейчас, когда есть лексические переменные и CL-совместимые макросы и функции, то вполне
Кстати, если уж так тошнит от elisp (от чего именно? от dynamic scope?), то есть реализации на CL и на Scheme. Но там, конечно, нет такого богатства готового elisp-кода, которое мы так любим
>Господа лиспачеры, пользуетесь ли вы емаксом?
Да
>Просто ну, ну сука ебать, ну бля, ну ебучий елисп, ну что это за хуйня ебаная
>Вас самих не выворачивает с того, что он такой ублюдский?
Чому?
Кроме перформанса с однопоточностью вопросов не вызывает
>И ведь альтернатив нихуя, чтобы дали мне не xterm дрочённый, а lisp-term точённый.
Чего?
>Ведь по сути, господа, емакс именно как терминалчик и применяется, ну и как шелл, и к обеим задачам по сути приспособлен ну примерно никак
Может прxминяться, может не применяться
>На портабельность на винду чисто поебать
Сосите хуй быдло
Есть смысл обратиться в тред сикп с этим вопросом
>SBCL (нативный код), Clozure CL (нативный код),
Ну харе врать, жид-машины там, причем даже без использования инструкций векторизации.
Сам ты жид блядб.
Вариант с нативной компиляцией (так называемый CS) сравнялся по функционалу с вариантом с байткодом. Со следующего релиза уже CS вариант будет основным.
https://pl.kotl.in/XE-IzGVCv
А в чем, собственно, сложность?
https://ideone.com/x9oRjz
В свою очередь, я бы посмотрел, как на котлине решается такое:
>(defmethod отъеби ((ебущий лошадиные) (ебемый лошадиные))
> (format t "~&~a засадил в ~aиный зад" (род ебущий) (род ебемый)))
>
>(defmethod отъеби :before ((ебущий пегас) (ебемый лошадиные))
> (format t "~&~a взпорхнув прицелился" (род ебущий)))
>
>(defmethod отъеби ((ебущий лошадиные) (циферки number))
> (format t "~&~@(~a~): Э-э-э! Я ж тебе не ~a, сам еби ~a" (род ебущий)
> (typecase циферки
> (bit "сишник-байтослесарь")
> (complex "математик")
> (real "физик"))
> циферки))
>Как такое решается в функциональных языках?
В чем задача заключается можешь объяснить?
А то код с каким-то ООП не делает проблему очевидной для меня.
Пишут, что Chez примерно как SBCL при дефолтных оптимизациях. В SBCL можно включить более опасные оптимизации, а в Racket-на-Chez можно критичную часть написать на Typed Racket. Короче, точно сказать трудно, если у тебя есть какие-то бенчмарки, которые можно запустить и на CL и на Racket, можно проверить.
Писал и на SBCL, и на Racket (и на Typed Racket пытался). По моим субъективным ощущениям, Typed Racket не даёт вообще никакого прироста производительности, ну и сам Racket ощутимо медленее SBCL. Плюс проблема даже не в тормознутости самой по себе, а в том, что ты в Racket с ней ничего не можешь поделать, даже понять, отчего тормозит. В CL же у тебя есть disassemble, декларации типов те же, declaim optimize, вот это вот всё. Есть простор для ручной оптимизации, что меня, как бывшего байтоёба, не может не радовать.
Ты не путаешь обычный Racket на байткод-машине с новым на базе Chez Scheme?
Меня, если честно, устроит пока если он будет в два-три раза медленнее, чем SBCL на максимальной оптимизации (а похоже, примерно так и будет). Для достаточно нового продукта это неплохо.
Кстати, инструментарий постепенно добавляют:
>as for the CS variant of Racket, then it cannot be converted back to an approximation of Racket, but installing the "disassemble" package may enable disassembly of the machine code. Decompilation is mostly useful for checking the compiler’s transformation and optimization of the source program.
> Ты не путаешь обычный Racket на байткод-машине с новым на базе Chez Scheme?
Пробовал оба, последний и правда даёт малюсенький прирост производительности.
> the "disassemble" package
Хах, пробовал я этот пакет, полнейшая залупа по сравнению с CL-ным disassemble. Последний тебе выводит подробнейшую информацию, какая константа что обозначала в исходном коде, какие имена функций, чокаво. Тот рэкетовский третьесторонний пакет тебе просто вываливает машкоды без всяких пояснений, и поди разберись, за что в твоём коде отвечает инструкция call 123456.
Ясно. Ну что ж, подождем, пока допилят.
https://www.youtube.com/watch?v=-1LzFxTbU9E
Зацените, какую годноту починили. Теперь слайм запускаю из образа с clim-listener и clouseau
Круть. А вот чтобы 50-минутное видео не смотреть, можешь вкрации, чем оно лучше slime-inspector?
Интерфейс чуть более удобный, всё-таки не текстовый емаксовкий буфер, может и графы рисовать, и вложенные структуры разворачивать. Ну и есть возможность наблюдать изменения в реальном времени. В остальном тот же слайм-инспектор
Серьёзно, (lambda x (y x)) это такое же уродство как и function(x){return y(x)} и признак говнокода.
Зато в лиспе не нужен сложный парсер, а ГОМОИКОННОСТЬ позволяет делать макрорасширения на коленке.
А ещё не нужно помнить приоритеты операций.
Как я тебя уел, а?
Меня волнует больше удобство и продуктивность на каком-либо ЯП.
>банальные примеры с map/reduce, которые легко пишутся в одну строчку, и только в лиспах придётся писать в несколько строк.
Ты просто не умеешь их готовить.
(defun sum-digits (number &optional (radix 10))
(reduce #'+ number :key #`(digit-char-p % radix))
>это такое же уродство как и function(x){return y(x)} и признак говнокода.
А монады лифтить - не уродство и признак говнокода?
>гомоиконность
дальше не читал
поэтому лиспари и ебанутые. Даже не знаю, кто ебанутее, хаскелисты или лисперисты
Для скриптинга в игорах и LUA используют, тащемта
риторика слабовата.
-Хилти дорого пиздец
-Да конечно епта заказ и без Хилти можно сделать, но все же понимают, что это халтурка будет. Кто себя ценит, всегда нанимает только бригаду с Хилти.
- Чем больше людей считает, что я не прав, тем выше вероятность, что они все ошибаются. Ну, чисто математически же.
- Поэтому и с лиспом так же.
Ваще ахуеть красава. У лиспа смотрю и евангелисты ахуенные. Срочно начинаю изучать этот богоязык. В пизду мейнстрим.
>x => y => x + y
>(fn [x y] (+ x y))
>#(+ %1 %2)
>+
ты привел очень тупой пример, кстати; в общем случае графический partial application работает чуть лучше, чем его хаскеллевские аналоги
В схемке кстати (λ (x y) (+ x y)) тоже норм выглядит.
>А ведь я ещё не привёл банальные примеры с map/reduce, которые легко пишутся в одну строчку, и только в лиспах придётся писать в несколько строк.
Бред какой. Это как раз в х-ле по традиции пишут трансформации в уебищном обратном порядке, тогда как в кложе (ну и окамле с его |>) все заебись:
(-> foo (map f) (filter g?) (reduce h))
И да, любой нормальный человек форматирует этот код так, чтобы каждый шаг был на отдельной строке, потому что так читать проще (капитан очевидность).
>признак говнокода
Понятие "говнокод" относится к абстрактной структуре кода, а не к используемому синтаксису. Короче юнец еще ожидающий возмужания ты, десу.
Монадошизик, спок.
>Пишут, что Chez примерно как SBCL при дефолтных оптимизациях.
Преувеличивают. Понадобилось вот распарсить 20гб xml, решил сравнить лисповые s-xml, cxml и ракетовский sxml.
Первый на моём тостере парсит ~24мб/с, второй - ~38-42мб/с, а ракета едва до 2мб/с разгоняется.
>>Пишут, что Chez примерно как SBCL при дефолтных оптимизациях.
>Преувеличивают. Понадобилось вот распарсить 20гб xml, решил сравнить лисповые s-xml, cxml и ракетовский sxml.
С дефолтными, а не максимальными. А cxml не только на максимум, но и вообще вручную злоебуче оптимизирован. Они даже строки свои написали! ("rods" у них называются).
Впрочем, xml в ракете это вообще какое-то говно, что меня очень удивило. Некоторое время назад надо было что-то большое парсануть, вообще не нашел ничего рабочего. Либо безумно медленно, либо не поддерживает namespaces, либо еще что.
mapping к реляционным субд и другим субд в виде edsl есть такое?
edsl к xpath, xslt?
xpath запросом и xslt трансформацией не быстрее было бы вытащить нужные данные?
вот это было бы круто
тайп чекер и вывод типов это как телега и космический корабль
Ну, делай. Вон можешь lem за основу взять
>что позволило бы динамически отрисовывать графики, сложные формулы.
Либо тебе вообще Maxima нужна
>edsl prolog что можете сказать?
Могу сказать, что это одна из тех вещей, которую должен написать каждый начинающий лиспер.
https://awesome-cl.com/#non-deterministic-logic-programming
>mapping к реляционным субд и другим субд в виде edsl есть такое?
https://awesome-cl.com/#database
https://github.com/fukamachi/mito/blob/master/src/core/class/table.lisp#L59
Наткнулся на такую проблемку. Та функция вызывается в момент инициализации класса, представляющего таблицу бд, ищет слоты, которые ссылаются на объекты других таблиц, и на каждый из них добавляет по вспомогательному с внешним ключом.
Например,
(defclass dir ()
__((name :col-type (:varchar 255))
___(parent :col-type (or :null dir)))
__(:metaclass dao-class))
должен добавиться слот parent-id (${slot-name}-${primary-key-name})
Проблема в том, что если слот ссылается на свой же класс или ещё не определённый, то вылетает ошибка, о чем, собственно, комментарий в коде и гласит.
Идиоматично ли добавление слотов на стадии финализации класса? В какой метод это разумнее перенести: finalize-inheritance, compute-slots, compute-effective-slot-definition или другой?
Ебаный AMOP без поллитры не раскуривается.
>AMOP без поллитры не раскуривается
А зачем он нужен, если не раскуривается? Ты мазохист?
Дропай и используй что-то более понятное.
Нужен, чтобы решить проблему постом выше.
Нет, функторы - это просто параметрические модули. Что касается макросов, они в ocaml таки тоже есть, но в виде препроцессора.
>С дефолтными, а не максимальными.
s-xml довольно бесхитростно написан
>xml в ракете это вообще какое-то говно
По-моему, в ракете со всем так. Который раз уже намереваюсь на ней писать, и постоянно всё упирается в отсутствие или непригодность библиотек.
>>817070
Мне их не вытащить нужно было, а перегнать в БД
>s-xml довольно бесхитростно написан
S-xml или cxml? s-xml действительно бесхитростен, но он еще примитивнее того, что есть в ракете. CXML это мощнейшая хрень, но там такая ручная оптимизация, что яебу такое писать.
Тебе там уже ответили
Хули ты приебался? Он же не носитель языка
WPF, Electron, Qt.
Язык-то какой? Общелисп? Схема?
https://lispcookbook.github.io/cl-cookbook/gui.html
Рекомендую обратить внимание на IUP: проект интересный, но несколько лет назад был сыроват, уж не знаю за текущее его состояние.
Под борщ, спасибо, гляну анончик. А можешь еще подсказать либу для реквестов и для парсинга хтмла?
Это другие борщи, анончик.
Молодой человек, у нас тут только кластеры метапарадигм, за функторами пожалуйте в соседнюю палату.
Ты пойми, мир сдвинулся. В результате страшной катастрофы были уничтожены практически все живые существа, а выжившие давали ужасное, поразительное в своей омерзительности, потомство. Большинство умирало, 90% первого поколения были бесплодны. Но в результате жутких мутаций стало возможно межвидовое скрещивание. Из-за множественного наследования здесь можно встретить кошмарных существ: программист С++ с телом рыбы и хуем слона, труп страуса с китовым усом вместо глаз, джигурду в малиновой юбке, выдающего себя за тайскую шлюху. Здесь царят хаос и ужас с тех пор как радиоактивная пыль скрыла землю от солнца в 1983 году. Потом, когда в 1998 решили снять режим глобальной катастрофы, человечество было уже мертво, потому были законодательно закреплены права новых существ. Организмы практически избежавшие мутаций были уравнены в правах с разлагающимися на глазах и истекающими слизью трупоедами и с хищными растениями. Ты представляешь всю безысходность этого мира? Но даже здесь можно видеть лучик надежды. Существа сохранившие глаза и осколки разума тянулись, как цветы с солнцу, к Роланду Дискейну Хаскеллу Карри и его небольшому отряду: Сюзанне Алонзо Чорчу и Джону Маккарти, которые устало брели через эти пустоши. Они были стрелками функциональщиками. Путники несли порядок и знания именем рода Эльда Теории Категорий. Существа хватались за эти крупицы, неловко пытались рисовать своими шупользеподобными руками стрелки на зеленом песке, они получали квадратные скобки вместо круглых, они хотели чистоты, но лишь продолжали пачкать и без того грязные руки. Маленький отряд уходил. Хаскеллу было невыносимо больно видеть страдания этих существ, он знал, что несет ответственность. Но уходил, ведь его неудержимо тянуло к Башне. Он знал, что Бьёрн ждет его там. И там должно было все решится. Из-за Бьерна мертв Денис. Из-за Бьерна мир сдвинулся. Хаскел шел вперед, хоть и не знал, чем это закончится, но два аппликативных функтора приятной тяжестью на поясе давали уверенность, что это лучи не будут разрушены...
Ты пойми, мир сдвинулся. В результате страшной катастрофы были уничтожены практически все живые существа, а выжившие давали ужасное, поразительное в своей омерзительности, потомство. Большинство умирало, 90% первого поколения были бесплодны. Но в результате жутких мутаций стало возможно межвидовое скрещивание. Из-за множественного наследования здесь можно встретить кошмарных существ: программист С++ с телом рыбы и хуем слона, труп страуса с китовым усом вместо глаз, джигурду в малиновой юбке, выдающего себя за тайскую шлюху. Здесь царят хаос и ужас с тех пор как радиоактивная пыль скрыла землю от солнца в 1983 году. Потом, когда в 1998 решили снять режим глобальной катастрофы, человечество было уже мертво, потому были законодательно закреплены права новых существ. Организмы практически избежавшие мутаций были уравнены в правах с разлагающимися на глазах и истекающими слизью трупоедами и с хищными растениями. Ты представляешь всю безысходность этого мира? Но даже здесь можно видеть лучик надежды. Существа сохранившие глаза и осколки разума тянулись, как цветы с солнцу, к Роланду Дискейну Хаскеллу Карри и его небольшому отряду: Сюзанне Алонзо Чорчу и Джону Маккарти, которые устало брели через эти пустоши. Они были стрелками функциональщиками. Путники несли порядок и знания именем рода Эльда Теории Категорий. Существа хватались за эти крупицы, неловко пытались рисовать своими шупользеподобными руками стрелки на зеленом песке, они получали квадратные скобки вместо круглых, они хотели чистоты, но лишь продолжали пачкать и без того грязные руки. Маленький отряд уходил. Хаскеллу было невыносимо больно видеть страдания этих существ, он знал, что несет ответственность. Но уходил, ведь его неудержимо тянуло к Башне. Он знал, что Бьёрн ждет его там. И там должно было все решится. Из-за Бьерна мертв Денис. Из-за Бьерна мир сдвинулся. Хаскел шел вперед, хоть и не знал, чем это закончится, но два аппликативных функтора приятной тяжестью на поясе давали уверенность, что это лучи не будут разрушены...
>STALIN often generates code that outperforms handwritten C and Fortran code
> The compiler does lifetime analysis and hence does not generate as much garbage as might be expected
Если это такой мощный компилятор, то почему его никто не развивает?
Он заброшен автором полтора десятка лет назад, а в его исходниках трудно разобраться кому-либо, кроме автора, потому что он из академии и пишет очень академический код. Но так-то да, из всех схемных компиляторов он до сих пор где-то в топ 3 по быстродействию, несмотря на то, что нихуя не поддерживает фичи из новых стандартов. Автор из (((этих))), кстати, отсюда и название.
В его работу я пока не вчитывался, а только проглядел по диагонали, но, кажется, он всё достаточно подробно и внятно изложил.
Вообще, для меня до сих пор загадка, почему для такого простого языка, который будто кроился под обкатывание передовых идей области компиляторостроения, за почти полвека так и не появилось ни одной нормальной реализации.
>Автор из (((этих))), кстати, отсюда и название.
Коммунист?!
Ну б-г тебе в помощь. Вот тебе еще статья Грэма с референсами на некоторые передовые и до сих пор непревзойденные вещи в области лиспового компиляторостроения: http://www.paulgraham.com/thist.html
На самом деле, я сам бы хотел этим заняться, но платить за это, по крайней мере сразу, никто не будет, а кушать хочется, вот и продолжаю уныло веслать.
>Автор из (((этих))), кстати, отсюда и название.
Коммунист?!
Еврей же.
>На самом деле, я сам бы хотел этим заняться, но платить за это, по крайней мере сразу, никто не будет, а кушать хочется, вот и продолжаю уныло веслать.
Да уж. За интересное никогда не платят. Я нагрёб себе на месяцев 10 гречки(сука, греча уже на вес золота) пшенки с хуйцами, теперь могу побыть свободным человеком.
Еще такой аргумент вброшу: при динамической типизации ты почти всегда будешь утыкаться по производительности в (ан)боксинг, если только не навернул продвинутый gradual typing, как в CL, но в R*RS такого, конечно, нету, минимализм во все поля.
>>881171
> Я нагрёб себе на месяцев 10
Смотри, сбережения утекают быстро. А вообще завидую.
Ну, я отложил из расчёта 15 на месяц, потому что больше никогда не тратил (если не считать разовых крупных покупок). Такой потолок позволяет не считать расходов, плюс остаётся порядка 4х тысяч, которые пойдут на месяц-полтора до первого заработка.
Сейчас всё дорожает - просто пиздец. И это только начало.
А тебя какой-то очень минимальный лимит.
Так что, мне кажется, 6 мес. было бы более реалистичной цифрой.
Тут ещё надо понимать, что 10 мес - это будет следующий октябрь.
Не лучшее время для поисков работы. Если к тому времени вообще будет работа.
Лучше - весна.
>А тебя какой-то очень минимальный лимит.
Это с запасом. У меня расходы скромные: интернет, счетчики да простые продукты (мука, крупы, овощи и т.д.).
>Лучше - весна.
Не, не лучше. Всрать лето на галеру никак не хочется.
Как по-человековому сделать репликейт (копирование строки N раз) в elisp'e?
Реплекейтить нужно много, в первом приоритете перформанс, общелисповые штуки исполььзовать не очень хочу (по крайней мере если они не дадут пару штук перформанса)
Можно предположить, что наиболее быстрый способ такой же, как в общелиспе — with-output-to-string. Или with-output-to-temp-buffer, если конечная строка должна получиться очень большой.
Хочу простенько дергать апишки новости там какие-нибудь, курсы валют, харкач, нужны какие-нибудь универсальные формочки\лейату
Искоробочные тейблы это совсем атас какой-то, стайлинг текста через enriched (что по совпадению идеально подходит под борды) почему-то ругается на какой-то фонт лок, имежи распердоливают высоту строки соответственно своей (их вообще можно как-нибудь вставить с рассчетом на несколько строк?)
Маркдаунские либы не очень подходят, для чего-то они получаются оверкиллом, для чего-то не хватает (манипуляций с имагами, например). тащить что-то большое для таких базовых задач не хотелось бы
Уже несколько вечеров ковыряю апишки, по итогу по делу ничего не написав, лол
Знающие люди, подскажите, пожалуйста. Как сделать, чтобы person не становился сам себе братом?
>clisp
clips ≠ clisp
>Как сделать, чтобы person не становился сам себе братом?
Добавь (neq ?x ?y)
Спасибо, а я сам так и не понял на чем надо писать, в задании на одной строке написано CLIPS, на следующией CLISP
>neq ?x ?y
Пытался так, не работало, может я тупо по синтаксису неправильно писал, я решил что надо в defrule одним из правил это указать, т.к правило срабатывает только если все эти функции возвращают тру. Но так жаловался компилятор или что там собирает код на этом языке. В итоге запилил что-то типа такого: (tparent (parentname ?f) (childname ?p&~?x)) , опять же не совсем вник как работает, но вроде как "p, но не x"
>в задании на одной строке написано CLIPS, на следующией CLISP
CLISP - реализация общелиспа, CLIPS - среда разработки экспертных систем со своим собственным лиспоподобным языком.
>Пытался так, не работало
><conditional-element> ::= <pattern-CE> | <assigned-pattern-CE> | <not-CE> | <and-CE> | <or-CE> | <logical-CE> | <test-CE> | <exists-CE> | <forall-CE>
><test-CE> ::= (test <function-call>)
Видимо, нужно писать (test (neq ?x ?y))
Объясните вкрации чем символ отличается от строки?
Годнота, спасибо
Пожалуйста, обращайся.
http://www.lispworks.com/documentation/HyperSpec/Body/t_symbol.htm
>Объясните вкрации чем символ отличается от строки?
Если кратко, не может быть два символа с одинаковым именем в пределах их пакета.
Казалось бы, причём здесь Лужков?
Сама по себе кожура - нет. Просто такая своеобразная штука с кучей сомнительных решений. Хайп прошел, кложехипсторы наигрались и бросили, с тех пор она больше никому и не нужна.
Ну тогда поторопись, пока ещё с парочку осталось на ххру целых две веб-обезьяньих вакансии на кложе, потому что скоро затихнут и последние отголоски былого хайпа.
Шапка для кого писана, а?
Не обращай внимания, это тебе местный шизик выше отвечал. Его в детстве анально изнасиловали кложурасты, теперь он от любого упоминания сабжа начинает верещать и проецировать в тред беспричинную жопную боль. Именно из-за таких дебилов для CL нихуя нет библиотек, кстати.
Это всё, что происходит в лиспомирочке?
> Самый мощный язык программирования это Lisp. Если вы не знаете Lisp (или его вариант, Scheme), вы не знаете, что имеется в виду, когда говорят о мощности и элегантности языка программирования. Однажды вы выучите Lisp и поймете чего не хватает в других языках программирования.
Это правда?
Да.
Прочитай practical Common Lisp, поймёшь в чем суть, эта книга специально создана для того, чтобы заставить читателя полюбить лисп.
>эта книга специально создана для того, чтобы заставить читателя полюбить лисп.
Я бы такую характеристику дал SICP'у, PCL - это прост для перекатышей из других промышленных языков, чтобы прочитал и хуяк-хуяк начал лямбды вертеть на доске маркером
>Я бы такую характеристику дал SICP'у
Не соглашусь. SICP - курс вводных лекций в программирование, схема там выбрана просто как высокоуровневый язык с низким порогом входа для новичков
>это прост для перекатышей из других промышленных языков
Лол. А из академических не получится, да?
В PCL-то как раз и интерактивное программирование показывается, и затрагивается тема eDSL. Но немного поверхностно, всё-таки книга рассчитана на незнакомых с общелиспом людей.
Спорить не буду, на вкус и цвет фломастеры разные, а обе эти книги хороши, каждая по-своему.
Но ведь Lisp - не базовый язык. В нем очень много "скрытых" элементов, такие как скоупы.
лисп - это семейство языков. щито там скрытого в скоупах? и щито такое "базовый"?
Толсто. Минимальнее лиспа ты ничего не найдешь. Лисп по сути - это 7 функций, все. Уровнения максвелла в компсае. Хочешь, основывайся на них. Потом выросли на этих принципах языки, которых по праву можно называть "лиспами". Если хошь минимализма - бери стандарт схемы который на 50 страниц. И я так и не понял почему ты фичи называешь скрытыми - это для тебя любая непонятная фича?
> Минимальнее лиспа ты ничего не найдешь
Ага, а переменные и редукция там на пране работают, а не подразумевают под собой некоторый механизм, да?
Да все подразумевает под собой какой-то механизм. Важно - где ты проводишь линию, абстракцию. И эта абстракция в лиспе - элегантна. Нет, хочешь, ебись с Ц и называй себя ноймоновским королем, мне то что.
> Да все подразумевает под собой какой-то механизм.
И это никак не оспаривает мой пост. Вот если бы на лиспе переменные были бы не встроенны, а просто абстракциями для удобства написанные на самом лиспе, то да, лисп был бы минимальным тьюринг-полным языком программирования.
Ты не догоняешь. Если у тебя есть 7 функций основанный на s-expressions и лейблом + абстрактная машина которая реализует это все (а она может это делать как угодно, в этом и смысл, она не должна быть фон номоновской), то ты в шоколаде. Вот смотри, ты говоришь переменные: а это просто alist, который ты можешь assoc'ать как хочешь. Переманная в лиспе - это атом замапанный к sexp'у через sexp: '((x 0) (y 1)). Твои int doubles manya_penentration = 44; здесь никому не нужны. "Переменных" тут нет - есть символы которыми ты оперируешь. Ты спросишь - откуда берется память под это все - да откуда угодно - это деталь реализации машины. Нужна арифметика? Ты - тьюринг полон и можешь ее реализовать через списки. Что бы это было оптимизировано, ясно что компилятор может использовать хардварные приблуды машины для которой он конпеляет, но это - НЕ обязательно.
> Какие-то сексы, атомы, списки, не понятно
Там ничего особо сверхсложного нет, просто почитай что-нибудь по этой теме.
пикрил отседова если кому интересно
https://medium.com/makimo-tech-blog/on-lisp-in-15-minutes-3286c179584f
>Scheme - это минималистичный лисп, пригодный в основном для обучения, исследований.
Исследований чего? Чем лисп лучше для PLT например хаскеля? Ради интереса спрашиваю.
> ::: Библиотеки
квикдокс похоронили - к сожалению, у мейнтейнера не было времени его обновлять и он почему-то так никому эстафету и не передал. теперь только на автогенеренный quickref.common-lisp.net пиздовать.
эту ссылку тоже можно включить в секцию, странно что ее нет
https://www.quicklisp.org/beta/releases.html
> Исследований чего?
Тонкостей GC, ленивых вычислений, ООП, чего угодно
> Чем лисп лучше для PLT например хаскеля?
Чем лисп.
Я лишь хотел сказать, что SICP не про лисп
Дописать проект на лиспе.
Дописать проект всегда лучше чем изучить что угодно.
>>948086
Минимализм можно определить по-разному. Лисп его достигает, кмк, на 2 уровнях: на уровне освновывющих принципов (что выражается в их очевидной лаконичности, вряд ли тут его что-то бьет) и на уровне написания программ (из-за макросов), и при всем этом он мультпарадигменный (это - важно) - то есть это тот минимализм, которым ты еще будешь пользоваться. Наверняка есть сопоставимые языки, у которых все эти черти имеются, но я о и них не знаю. Тот же пролог, например, тоже минималистичен, но он позволяет писать только в своей парадигме, а все остальное выглядит как костыли. То же самое хаскель.
Про названные языки ничего сказать не могу, я их не изучал, не отрицаю их возможных заслуг, но если проясните, буду рад послушать.
Да похоже, что они вещали не сохраняя.
Другие зато выступления есть на том же канале https://www.youtube.com/watch?v=aljDBoZC74w
Скабочек не больше, чем в питоне. Теперь каждому, кто говорит, что лишп для скобкоблядей буду показывать мой код, и ехидно буду указывать на его си-портянки.
А DrRacket? Он же буквально стрелочками указывает, где у тебя ошибки.
Алсо, попробую racketscript (на крайняк Urlang), а то пока код только для лаб подходит. Планирую писать фронтенд на ракетке.
>Теперь каждому, кто говорит, что лишп для скобкоблядей буду показывать мой код, и ехидно буду указывать на его си-портянки.
Показывай
Ноут уже выключил. Завтра кину в тред свои велосипедики.
Да, анон, супер. Тебя ждет великое будущее.
Ну да, таким кодом любому нос утрёшь
> { }
Фу, хуже чем кожуропедики
> significant whitespace
Фу
> меньше скобочек
Ну блять, что плохого в скобочках-то? Просто подвинули левую скобку налево, т.е. вместо fn() писать (fn), fn(fn(fn(fn(fn())))) не особо лучше выглядит чем (fn (fn (fn (fn (fn))))).
Не люблю интерпретируемые языки. Не могу сказать, что мне нужна скорость, но мне просто приятно, когда я пишу программу на Си и я вижу, как быстро она работает.
Держи в курсе.
Зачем загрязнять код скобочками? Будьте как хаскелисты, у них вообще скобочек нет.
Итак, у меня есть штука, которая принимает некий id. Если количество таких уникальных id (уже поступавших ранее + полученное теперь) не превышает некий заранее определенный лимит, то я должен пропустить это сообщение дальше.
Например, лимит 10. Значит я должен хранить в памяти 10 уникальных id. Изначально список таких id пустой, как только получили первое сообщение - записали его в список, вернули id. Получили второе сообщение - если id еще не в списке - сохранили, вернули id. Как толко размер списка стал 10, стали возвразать nil.
Не могу придумать, как это решить без использования изменяемой коллекции.
(def limit 10)
;; Метод который вызывается когда в рабит что то прилетает
(def message-handler [_ message]
(if (limit-filter message) message nil))
(defn limit-message [message] (??????))
Примерно вот так надо. Как сделать без мутаьельного списка - хз
Если я тупой, так и скажи, ты вот сейчас вообще не приблизил меня к решению.
Гомоиконность может быть и без скобочек. Посмотри на пролог. Он даже более гомоиконный, чем лисп, ибо в нём нет редукции, только унификация.
Но в прологе нет редукции выражений, есть унификация и скрытый механизм исполнения предикатов. Гугли клаузы Хорна.
К примеру, я могу сделать так:
test(X + Y) :- writeln(X), writeln(Y).
:- test(2 + 2) % напишет в консоли "2\n2"
В прологе абсолютно всё - данные.
Так что для гомоиконности скобки не нужны.
Нихуя не понятно. ВЫглядит как будто ты просто объявил функцию от 2 аргументов, и затем ее вызвал. В чем разница с тем же кодом на питоне?
def test(x,y):
....print(x, y)
test(2, 2)
Я могу вот это test(X + Y) :- writeln(X), writeln(Y). запихнуть в аргумент, или вернуть из функции?
Никак да и незачем.
Ну пардон что я не шарю в языке документацией к кторому теперь только жопу подтереть, и не пишу по интепритатору в неделю как авторы sicp. Унификация-хуификация, ты сам то понимаешь, насколько это ирл беполезная хуйня, понимать что такое унификация в насколько узком контексте?
Долбоеб, унификация = паттернметчинг. Пиздец, что ты забыл в треде лиспо-господ? Иди в js-тред.
Кстати, совет очень полезный (объективно), но нет.
Твой код на прологе (во имя чего ты его выучил?) выглядит как функция, объявляется как функция, вызывается как функция и работает как функция. Паттерн матчинга там в упор не вижу, если только + это не какой то специальный прологовский синтаксис, а обычный опреатор сложения, но откуда мне знать? Я не некромант
> Твой код на прологе (во имя чего ты его выучил?) выглядит как функция, объявляется как функция, вызывается как функция и работает как функция. Паттерн матчинга там в упор не вижу, если только + это не какой то специальный прологовский синтаксис
Пиздец в жиру всё поплыло. Еще раз для тупых:
writeln(2 + 2) вывыдет на экран не 4, а 2 + 2. В прологе 2 + 2 это тоже самое что и +(2, 2), т.е обычный функтор, которым можно как угодно оперировать. Редукция не обязательное условие для тьюринг-полноты. Не спорь о том, в чём не разбираешься.
>Не спорь о том, в чём не разбираешься.
Я не спорил, если ты посмориш ьна мой первый пост, я там задал 2 вопроса, на которые ты овтетил толко спустя 3 поста. Это ты выбрал 3 поста сраться, прежде чем ответить. Извини, но я не пойду гуглить синтаксис пролога, просто потому что кто то запостил его в треде лиспа. Я спросил.
> у тебя видно питон головного мозга
Haskell
> показывай лисповую гомоиконность без скобочек с сохранением семантики.
Заменить скобки на табы, оставить скобки только в однострочых выражениях. Семантика кода никак не поменяется. Получится sweet-exp.
Настолько неприятно, что от злости даже текст набрать нормально не можешь?
И при чём тут ситаксис, если говорилось об исполненении кода?
>>953513
> Заменить скобки на табы, оставить скобки только в однострочых выражениях. Семантика кода никак не поменяется. Получится sweet-exp.
окай, но не вижу смысла. ты можешь наставить несколько коротких выражение в одну строку со скобками, с табами ты будешь их делить на вертикальные портянки? но зачем? а код ты все равно засоряешь - только теперь ньюлайнами. плюс редактировать скобки то уж поудобнее будет с нужными плагинами, которых, я вангую, для твоего свитэкспа не завезли.
Вот каждый раз, наслушавшись про ракету, решаю дать ей шанс и в итоге упираюсь в отсутствие нормальных библиотек. В этот раз http-клиента не нашлось. Пиздец.
Мимокрок.
Пытаюсь сейчас транспилировать код в js. Решил пользоваться Urlang, ибо racketscript хоть и транспилирует, но не понятно, как в пользоваться готовыми интерфесами типа WebRTC, MediaRcorder, DOM API.
Пока выходит так себе. (quote) не работает, а quote - лучшая часть лиспа, ради которой и переходят на него.
Я вообще-то вкатун, реально интересно...
Тайдал как-то не зашел. У них там на лиспе то есть что-нить?
это все - cl-collider? чет шишка встала
а что за красивые мониторы вокруг? это какие-то плагины к суперколлайдеру?
На скрине он, ага.
Я последнее время пробую cl-patterns: реализацию паттернов из SuperCollider. Там есть несколько бэкендов, один через cl-collider и еще один через cl-alsaseq, которым я и пользуюсь чтобы отсылать миди на хардварные девайсы.
https://old.reddit.com/r/emacs/comments/lnwc72/i_will_be_demoing_an_emacscl_music_performance/
Было, но записи не осталось. Заебись они организовали, да?
Бля, попробую вкатится. в лисп и емакс уже могу.
Пробовал как-то Renoise, но привыкнуть к интерфейсу так и не получилось, он не настолько настраиваемый как кажется, да еще closed-source. Перелез на Ableton Live, ну там совсем другой подход, плагинов/инструментов завались, но только гитару на нем записываю в конце концов. Короче, воркфлоу что там что там какой-то деревянный. А вот лисп выглядит как-то прям для души.
Есть еще плагины который посоветуешь, ресурсы без которых было бы тяжко?
https://www.youtube.com/playlist?list=PLPYzvS8A_rTaNDweXe6PX4CXSGq4iEWYC
+
https://github.com/supercollider/scel (он обычно идет в комплекте с самим коллайдером)
Я пока не разобрался нормально с sclang и не разобрался в синтезе на реальных железках/плагинах, в cl-collider вкатится не мог хотя было приемлемо лиспо-опыта.
Спасибо за ссылки. Да, я слышал вещь не простая, да но главное что б руки чесались : )
А еще вопрос, bitwig как взаимодействует с sc? Он подключается как VST? И что он дает, чего не дает supercollider?
Я отправляю миди из cl-patterns в железяки. Звук с них отправляется через аудиокарту в битвиг. Коллайдером в данном случае я вообще не пользуюсь.
Если звук генерится через коллайдер, то битвиг в целом не нужен.
ок, понял!
Профит в том, чтобы бросить курить JS. Однако бросать web я не хочу, ибо не найдешь ничего удобнее HTML+CSS. А js как бы вроде и норм, но с другой стороны, есть же вещи и лучше.
Вообще самый идеальный вариант - некий метаязык созданный для транспиляции и не привязынный к байтикам, виртуальным машинам, средам, экосистемам, и где ты можешь использовать любой синтаксис, который только пожелаешь. Но таких пока нет. Разве что использовать Nearley для транспиляции, однако он не тьюринг полный, потому на самом nearley непопрограммируешь монады и афинные типы.
>>954094
Как-то не знаю даже. Хочу рекет, ибо идея у него 10/10
Так Elm не гомоиконный. Как я на нём макросы под свои нужды писать буду? Вот пишу я либу для работы с музыкой, как я буду преобразовывать синтаксис аккордов (типа D#4maj7) в понятный компьютеру Chord (Note (D # 4) maj7)? Парсить во время исполнения - для пидоров, у которых языки немощные.
Ты мелодии захардкодить собрался что ли?
Видали новую инкарнацию weblocks? Шустренько работает, мне понравилось. Но всё равно считаю, что за веб гуй нужно обоссывать
Сомневаюсь в нужности. Запустить сервак на компе, а это - на мобилке или планшете - ну ок, поиграться там, покрасноглазить - нормас. А на десктопы есть мкклим.
Кстати про McClim - кто нибудь окунался в него основательно? Какие отзывы, впечатления? Он ведь даже и не умер - не дали ему, пилят сейчас. Но его преподносят как какое-то божественное откровение. Прочитал туториал - ну обычный фреймворк. Да - универсальный. Для чего репрезентации и какие-то сверхкоманды охуительные - так и не понял. Сложилось впечатление немного бесполезной обобщенности. Дискас.
Пиздец, ну и уродство. Автор библиотеки ничего не понимает в создании UI. Пусть лучше посмотрит на то, как выглядит UI в KDE и MacOS. и в новом гноме
Лямбда - это лямбда, а progn - это progn. Но результат приведенных тобой выражений одинаковый, да.
>Но результат приведенных тобой выражений одинаковый, да.
Нихуя
> (lambda ())
>#<FUNCTION (LAMBDA ()) {52B8C6BB}>
> (progn)
>NIL
Пока хотя бы gtk-бэкенд не доделают, смысла пилить на нем приложения не будет.
И не только потому, что вырвиглазно. https://github.com/McCLIM/McCLIM/issues/35
А как быть с обращениями? У меня как-то аккордовая нотация не прижилась.
https://soundcloud.com/tatrix-imba/session-2021-03-03-03
клозо я видел, да, интересная штука конечно, но обычный текстовый инспектор кмк и так покрывает 99% юзкейсов достаточно годно.
ls | grep "regex" | sort -u | head -n10
ИМХО это очень просто читать, потому что считаешь слева направо и понимаешь, что происходит. В лиспе такое можно делать?
Да, в кложе это из коробки, притом более гибкое, чем пайпы или оператор |> из окамла: есть варианты, которые протаскивают значение первым аргументом (->), последним аргументом (->>), явно именованным аргументом (as->), протаскивают только при выполнении условия (cond->), и т.п.
В остальные лишпы эту фичу тоже спиздили, ибо благодаря лисп-макросам все это можно реализовать как библиотеку, а не менять сам язык.
>явно именованным аргументом (as->), протаскивают только при выполнении условия (cond->), и т.п.
Это ж просто анафорические макросы, им сто лет в обед
Потому что никто не запрещает писать функционально. Плюс есть кложа и прочие схемы.
> почему же тогда в прикрепе лисп включен в функциональные?
Шапка устарела много лет назад, лол. А половина перечисленого там уже чиллит на кладбище
http://www.lispworks.com/documentation/HyperSpec/Body/m_defun.htm
Все правильно он сказал.
И вообще, зачем так писать? Ради экономии на спичкахстроках?
Все def* возвращают имя, так уж сложилось
((lambda (x) x) 'x)
> Нужно же что-то возвращать, это же лишп
Почему стейтмент вообше должен что-то возвращать. Это же не выражение, это стейтмент, блядь. При попытке использования стейтмента (типа set, defn, и пр. ) как выражения должно выкидываться синтаксическая ошибка.
> Почему стейтмент вообше должен что-то возвращать
Язык такой. Setq тоже возвращает значение переменной
> Это же не выражение, это стейтмент, блядь.
А еще это функция, она должна что-то возвращать.
Макрос это правило замены одного терма другим термом. А set это стейтмент, потому что не должен возращать никаких значений.
> set это стейтмент
set{q,f} это специальная форма.
Ничего плохого в
(when (equal (setq x (- x 1)) 0) ; можно заменить на incf для разнообразия
body)
нет, такое делают даже в Си
> Какой set?
Который (set x 5) из Scheme/Racket.
> Кому не должен?
Потому что set это не функция. Функции (лямбды) работают не так, как работает set.
>>959744
> Ничего плохого в
> (when (equal (setq x (- x 1)) 0)
Ничего плохого? Алло, state мутирует! Ты эффект используешь там, где его он не должен быть.
>Ничего плохого? Алло, state мутирует!
О, секта непорочного состояния подъехала. Каюсь, грешно менять Богом заданные значения, но такова уж природа фон-неймановских машин.
Да и что плохого? Если ты вынесешь присваивание за скобки, то ничего не изменится. Давай, доставай свою методичку, рассказывать будешь, как и кому в том коде простреливают ногу.
> Ты эффект используешь
Не эффект, а результат вычисления (- x 1)
>Функции (лямбды) работают не так, как работает set.
(when (= ((lambda (y) (set! x y) y) (- x 1)) 0)
(display x))
А теперь можно, товарищ пресвитер?
Нахуя ты вообще схему сюда приплёл?
> Не эффект, а результат вычисления (- x 1)
Изменение скоупа - эффект
> А теперь можно, товарищ пресвитер?
Нет нельзя.
>Нет нельзя.
Ты скозал? А компилятор с тобой не согласен.
Ну ты какой-то хуёвый сектант. Ни бэ, ни мэ. Даже свою позицию отстоять не можешь.
>Why not?
Потому что коммоншлишп - это лишп-2, у него отдельные пространства имен для функций и для всего остального.
Это выражение, а не стейтмент. Разделение выражение\стейтмент вообще артифакт говноедских язычков, в нормальных языках все является выражением.
>>960068
У тебя дикая каша в голове, ты не понимаешь значения слов: функция, экспрешн, стейтмент; плюс путаешь все это с мутабельностью, которая вообще никаким боком отношения к экспрешн-или-стейтмент дихотомии не имеет.
>>960463
Там нет изменения скоупа, значения слова "скоуп" тоже не понимаешь.
https://www.notion.so/Bounty-Experiment-3-07-21-3-28-21-d2839e46b19b4bf9aeb6299845974622
https://github.com/athensresearch/athens
https://github.com/athensresearch/athens/projects/11
Елисп - тоже лисп-н.
> Это выражение, а не стейтмент
Начнем с того, что print, read, write, и прочее - не функции, а процедуры (эффекты). Процедура делает что-то: обращается к дб, делает сетевые запросы, и в конце концов, читает файлы. Процедура ничего не возращает, но может модифицировать переменные.
Ты можешь использовать выражение внутри применения эффекта (процедуры), но не наоборот.
В чистых языках программирования эффекты (процедуры) либо вынесенны за компилятор, либо являются отдельными сущностями, отличные от функций.
> Там нет изменения скоупа
set! не меняет скоуп (область в которой хранятся переменные)? Ну ок.
>В чистых языках программирования эффекты (процедуры) либо вынесенны за компилятор, либо являются отдельными сущностями, отличные от функций.
Не знаю, о каких языках ты говоришь, но последователи единственного в мире чистого языка, на котором хоть кто-то что-то пишет, тебя бы обоссали, прийди бы ты к ним с такими проповедями. В их мире не существует побочных эффектов, но бывают функции, применённые к глобальному состоянию World и возвращающие новое.
>print, read, write, и прочее - не функции
Функции.
>Процедура ничего не возращает
read - отличный пример процедуры, ага.
>Ты можешь использовать выражение внутри применения эффекта (процедуры), но не наоборот.
И наоборот могу, но у тебя каша в голове.
>В чистых языках программирования эффекты (процедуры)
1. Схема - не чистый язык.
2. "Эффект" и "процедура" - это разные понятия.
>set! не меняет скоуп
Нет.
>скоуп (область в которой хранятся переменные)
Скоуп - это не область, в которой хранятся переменные.
В общем нахватался вершков, но усвоить смысл понятий не успел. Вместо того, чтобы пытаться спорить, лучше продолжай обучение. Пока неуд, придешь в конце четверти на пересдачу.
Кстати, оп кложетреда задолбался его бампать и он утонул, добавьте ссылку на шапку кложетреда в итт.
>read - отличный пример процедуры, ага.
Ну да. https://www.freepascal.org/docs-html/current/rtl/system/read.html
Казалось бы, причем тут лисп?
>Скоуп
Областью видимости она называется.
Рунглишопроблемы у товарища: слово запомнил, а смысл забыл.
:: Common Lisp - разрабатывался как промышленный язык, пригодный для широкого спектра применения, из-за чего имеет достаточно объемную спецификацию. Является мультипарадигменным (процедурщина, функциональщина, ооп (CLOS)), с сильной, динамической типизацией. Есть опциональная декларация типов и частичный их вывод в некоторых реализациях.
Описание особенностей: http://habrahabr.ru/post/143490
Основные реализации:
- свободные: SBCL (нативный код), Clozure CL (нативный код), ECL (через сишку), Clisp (байт-код; небольшой размер образа; похоже, заброшен), Clasp (LLVM; ориентирован на интероп с C++), ABCL (байт-код JVM), CMUCL, GCL.
- коммерческие: LispWorks, Allegro CL, Scieneer CL, mocl
:: Scheme - это минималистичный лисп, пригодный в основном для обучения, исследований. Наиболее практичными реализациями являются GNU Guile и Chicken Scheme.
:: Racket - развитие PLT Scheme. Racket включает в себя много подъязыков (typed racket, lazy racket, frtime racket, Scheme стандартов r5rs и r6rs).
:: Clojure - cм. соседний тред (ОПу почившего надоедло бампать, шапка здесь: https://rentry.co/9ve9d )
:: Common Lisp - разрабатывался как промышленный язык, пригодный для широкого спектра применения, из-за чего имеет достаточно объемную спецификацию. Является мультипарадигменным (процедурщина, функциональщина, ооп (CLOS)), с сильной, динамической типизацией. Есть опциональная декларация типов и частичный их вывод в некоторых реализациях.
Описание особенностей: http://habrahabr.ru/post/143490
Основные реализации:
- свободные: SBCL (нативный код), Clozure CL (нативный код), ECL (через сишку), Clisp (байт-код; небольшой размер образа; похоже, заброшен), Clasp (LLVM; ориентирован на интероп с C++), ABCL (байт-код JVM), CMUCL, GCL.
- коммерческие: LispWorks, Allegro CL, Scieneer CL, mocl
:: Scheme - это минималистичный лисп, пригодный в основном для обучения, исследований. Наиболее практичными реализациями являются GNU Guile и Chicken Scheme.
:: Racket - развитие PLT Scheme. Racket включает в себя много подъязыков (typed racket, lazy racket, frtime racket, Scheme стандартов r5rs и r6rs).
:: Clojure - cм. соседний тред (ОПу почившего надоедло бампать, шапка здесь: https://rentry.co/9ve9d )
Это копия, сохраненная 17 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.