Лисп - семейство языков программирования. Характерные особенности лиспов: динамичность, гомоиконность (код как данные), программируемость. Основные диалекты— 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 - Стильный, модный, молодежный лисп с бóльшим уклоном в функциональщину, иммутабельными структурами данных, поддержкой параллельщины с транзакционной памятью, агентами. Ориентированность на JVM сильно отразилась на дизайне языка, что многим не нравится.— Hy - Lisp-синтаксис для Python с анафорическими макросами ( http://hylang.org/ )— Emacs Lisp - его область применения ограничивается емаксом. Является наследником ТОГО САМОГО MacLisp'а.— Lisp Flavored Erlang (LFE) - Реализация Lisp поверх виртуальной машины Erlang (BEAM) в итоге мы имеем всё лучшее из обоих миров: привычный синтаксис s-выражений, макросы, функциональщина, иммутабельность, многопоточность из коробки + набор либ для построения отказоустойчивых распределённых приложений OTP. http://lfe.io/— Tcl - скриптовый язык с немного наркоманскимстранным синтаксисом. Из коробки множество батареек на любой случай жизни, среди которых неповторимый Tk. Язык очень удобен для написания скриптиков, особенно когда к ним требуется приделать графический интерфейс.— Rebol— PicoLisp - Наркоманская хуита— newLISP - Скриптовый лисп с компактным и быстрым интерпретатором и батарейками на любой случай жизни. В первую очередь предназначен для скриптоты, которую обычно пишут на perl, python, tcl, sh: обработка текстов, работа с сетью, базами данных, взаимодействие с ОС, построение графиков и т.п.Список возможностей: http://www.newlisp.org/index.cgi?FeaturesОтличия от других диалектов: http://www.newlisp.org/index.cgi?page=Differences_to_Other_LISPs Как изучить? — Emacs Lisp + An Introduction to Programming in Emacs Lisp https://www.gnu.org/software/emacs/manual/html_node/eintr/index.html — скучный туториал, предполагающий что читатель вообще не умеет программировать + Emacs Lisp Reference Manual https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html — Common Lisp + Practical Common Lisp http://www.gigamonkeys.com/book/ или русский перевод — http://lisper.ru/pcl/ + On Lisp http://www.paulgraham.com/onlisp.html + Land of Lisp + Common Lisp HyperSpec http://www.lispworks.com/documentation/HyperSpec/Front/ — стандарт языка + Art of Metaobject Protocol — подробное описание MOP и CLOS + Попрактиковаться можно на Exercism'е http://exercism.io/languages/lispАлсо, годная статья про проектирование eDSL'ей на CL http://swizard.info/articles/solitaire/article.html — Scheme + The Little Schemer (https://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992), The Seasoned Schemer (https://www.amazon.com/Seasoned-Schemer-MIT-Press/dp/026256100X), The Reasoned Schemer (https://www.amazon.com/Reasoned-Schemer-MIT-Press/dp/0262562146), Death of a Schemer (https://www.amazon.com/Death-Schemer-Frank-May-Chronicles/dp/1610273060) + SICP (это скорее вводные лекции по программированию, а не учебник по схеме, но тоже пойдет) + http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html + Попрактиковаться можно на Exercism'е http://exercism.io/languages/scheme — Racket+ The Realm of Racket+ How to Design Programs http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html+ https://docs.racket-lang.org/ — Clojure + Programming Clojure, 2nd edition (для новичков) + Clojure for brave and true http://www.braveclojure.com/foreword/ — В отличие от предыдущего сухого изложения, более приятный для восприятия материал, да и бесплатный, если читать онлайн. + The Joy Of Clojure, 2nd edition (есть есть бэкграунд в Лиспе или ФП) + Попрактиковаться можно на Exercism'е http://exercism.io/languages/clojure — Tcl/Tk + Официальный учебник http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html + Документация по tcl http://www.tcl.tk/man/tcl8.6/TclCmd/contents.htm и tk http://www.tcl.tk/man/tcl8.6/TkCmd/contents.htm + Статьи про Tcl и Tk на wikibooks с примерчиками https://en.wikibooks.org/wiki/Category:Tcl_Programming + TkDocs с примерами на tcl, perl, ruby http://www.tkdocs.com/tutorial/index.html Среды разработкиОдно из основных преимуществ лиспа в сравнении с языками с циклом разработки "написал → перекомпилировал → запустил в отладчике" - поддержка интерактивно-итеративного метода разработки. Но без инструментария, обеспечивающего полноценное взаимодействие с реплом, оно сводится на нет. Поэтому писать без использования нормальной среды - значит упустить важную особенность языка. !!Чтобы не ебаться с емаксом, лучше можно взять уже преднастроенный spacemacs ( https://github.com/syl20bnr/spacemacs ). — Common Lisp + Portacle ( https://shinmera.github.io/portacle/ ) + Emacs + SLIME - самый лучший вариант. + vim + SLIMV + LispWorks + AllegroCL IDE упаси боже + Eclipse + cusp + <Что-нибудь для сублайма/атома уже запилили, наверное?> — Scheme/Racket + Emacs + Geiser (поддерживает GNU Guile и Chicken Scheme) + DrRacket — Clojure + Emacs + CIDER + LightTable + Vim-fireplace + Cursive Clojure (IntelliJ plugin) + Counterclockwise (Eclipse plugin) — Tcl + Emacs + tcl-mode (только подсветка синтаксиса и простенькое взаимодействие с реплом, но жить можно) Библиотеки— Common Lisp + Quicklisp ( https://www.quicklisp.org/beta/ ) - CPAN из мира CL + Quickdocs ( http://quickdocs.org/ ) - документация по всем пакетам из quicklisp + Проекты, заслуживающие внимания ( https://github.com/CodyReichert/awesome-cl ) + Cliki ( http://cliki.net/ ) + Обзор экосистемы общелиспа на швабре ( http://habrahabr.ru/post/265589/ ) — Scheme + Racket: http://pkgs.racket-lang.org/ и http://planet.racket-lang.org/ + Chicken: http://wiki.call-cc.org/chicken-projects/egg-index-4.html + http://snow.iro.umontreal.ca/?tab=Packages + http://www.schemespheres.org/spheres Предыдущие треды: http://arhivach.org/?tags=3055,113Шапка: https://titanpad.com/x87hR0KJ2w
>Cloje - a clone of Clojure built atop Scheme/Lisp.https://gitlab.com/cloje/cloje
https://practicalli.github.io/spacemacs/здарова чувачки
Скажите мне, что не так с лиспом?Вроде такой крутой язык, а неумеет нормально с IO работать. Пара каких-то дерьмолиб и все.Где его вообще можно применять то?
>>1010719В задачах искусственного интеллекта, конечно же.
>>1010719у кложи все ок с io
>>1010738>у кложи все ок с io java/netНасколько я понимаю.>>1010722>В задачах искусственного интеллекта, конечно же. Сложно себе представить такие задачи без интенсивного IO и параллелизма.
>>1010719В функциональным языках вообще всё плохо с IO.
А как мне быть если нужно хранить состояние? Вот я должен проводить итерацию пока не будет достигнут какой-то критерий. А критерий может быть мутабельным, ну например на протяжении скольких-то шагов приращение результат было меньше заданной точности. Тупо создавать новое состояние и кидать его как доп параметр в рекурсии?
>>1010831>А как мне быть если нужно хранить состояние? Вот я должен проводить итерацию пока не будет достигнут какой-то критерий. А критерий может быть мутабельным, ну например на протяжении скольких-то шагов приращение результат было меньше заданной точности. Тупо создавать новое состояние и кидать его как доп параметр в рекурсии? Ты наркоман совсем?Если нужно хранить состояние - храни состояние.Лисп тебе этого не запрещает.
>>1010831Да. Вообще говоря любой цикл можно реализовать через (хвостовую) рекурсию.
>>1010822хуево все с IO только у хаскеля из-за фанатичной чистоты. Какие проблемы у кложи или у эрланга?
>>1011009>запрещаетНу он очень толсто намекает.
>>1010722Для таких задач есть пролог тащемта
>>1011096>Ну он очень толсто намекает. И не намекает даже.
Почему лисп не конкурентно способный по отношению к другим языкам? Почему он непрактичен? Даже в MIT нет Lisp.
>>1011381>не конкурентно способныйоткуда инфа? Лиспы это много языков и на лиспах написано достаточно продуктов.
https://www.tiobe.com/tiobe-index/
Аноны, какой Лисп пригоден для веба? Рассматриваю Racket и Clojure. В Racket нравится почти все, правда пока не догнал как на нем писать для веба. В Clojure не нравится JVM и запутанный веб-стек.
>>1011428я не юзал ракет, поэтому не могу за него советовать, я по кложе. Стек простейший, ring и compojure это все что тебе надо для того чтобы делать вебприложения. Осваиваются за пару дней. Удачи
>>1011431Спасибки. Мне вот почему то стек не показался простым, ну да ладно, буду бить дальше. А как насчет ClojureScript, по идее на нем можно писать под Ноду, или нет?
>>1011434>НодуКонечно можно, и к реакут ее тоже можно прикрутить.
>>1011453>Конечно можно, и к реакут ее тоже можно прикрутить. Лучше сразу к PHP
>>1011453Спасибо.>>1011465К чему такой выпад? Писать на Javascript нет никакого желания, а раз уж ClojureScript компилится в Javascript, то почему бы не использовать его и на Ноде.
>>1011465пацан ты походу ваще не вывозишь. Пыха это для рендеринга хтмля сервером. Мы про кложескрипт говорим, который на js хостицца. Реакт хороший фреймворк который дает няшные абстракции. Почти все библиотеки для работы над интерфейсами в кложескрипте являются сорт оф врапперами над компонентной системой реакта и это хорошо, потомушта реакт няшненький и декларативный, состояние от поведение отделяет.Учись и просвящайся
Читаю СИКП и столкнулся с такой фигней, например выражение и книги(define (abs x) (if (< x 0) (- x) x))не будет работать правильно, потому что интерпретатор воспринимает минус из (- x) как функцию, и поэтому не возвращает отрицательный x.То есть если вызвать функцию с положительным числом, то все будет нормально, (abs 5) вернет 5.Если вызвать с отрицательным, (abs -5) то функция вернет положительное число 5, так как интерпретировала (- x) как функцию - и положительный x. Если убрать скобки, будет ошибка синтаксиса. Не знаю как быть. Вроде должен быть оператор, который говорит что форма не содержит функций, чтобы (- x) возвращал отрицательный x. Не знаю как загуглить это, помогите плиз. Пишу на Racket.
>>1011525определи функцию которая отнимает число от нуля и используй ее тут вместо минуса
>>1011534ну или просто (- 0 x) :)
>>1011534>>1011536Оригинальное решение, спасибо. Все таки хочу на будущее узнать как интерпретировать выражение как обычную форму без функций. В кложуре точно есть такой оператор, а вот в рэкет не знаю.Непонятно как могли такое написать в СИКПе, код ведь не рабочий.
>>1011536Парадокс, но как ты написал не работает, нужно наоборот, (- x 0). Это только в ифах так. Чет даже не смешно, что не так с ракетой.
Нашел обновленную, исправленную версию СИКП, и там тоже самое, везде пишут (- x), как так, это же не работает.(define (abs x) (cond ((> x 0) x) ((= x 0) 0) ((< x 0) (- x))))(define (abs x) (cond ((< x 0) (- x)) (else x)))(define (abs x) (if (< x 0) (- x) x))Ну почему такая херня, они что не проверяют код.
>>1011592Возьми MIT Scheme и проверь
>>1011594Что за MIT Scheme? Проверял в Racket. Да и что проверять, и так ясно что первый минус интерпретируется как функция.Нашел в одном месте указание на такое поведение, но там вместо ссылки на объяснение, 2 левые ссылки.For example, here's how one could create an absolute value procedure using lambda and if.> (define abs-of-steele (lambda (x) (if (>= x 0) x (- x))))> (abs-of-steele -1)1> (abs-of-steele 1)1To understand why this is a horrible pun, click here and here.Взято отсюда http://cs.gettysburg.edu/~tneller/cs341/scheme-intro/
>>1011600примеры кода в сикп даны на языке Scheme. Это тоже такой лисп, там работает унарный минусMIT/GNU Scheme running under OS X1 ]=> (- 1);Value: -1
>>1011612Ну и что? Racket это бывший Scheme. Фактически это один и тот же язык. Проблема же не в языке, а в том, что кто-то неправильно дает примеры, если даже в СИКПе ошибка.
>>1011616Как мы видим, не один и тот же
>>1011621Попробуй такую функцию:(define (abs x) (if (< x 0) (- x) x))При вызове на отрицательном числе, будет выдавать положительное.
>>1011623Парень, ставь mit scheme и переставай зафлуживать тред :)1 ]=> (define (abs x) (if (< x 0) (- x) x));Value: abs1 ]=> (abs -33);Value: 33
>>1011636У тебя должно было вернуть -33, отрицательное число должно было вернуть. В том то и ошибка.
>>1011643Схуяли?
>>1011636Все разобрался. Минус на минус дает плюс. Не понял условие, думал, что на отрицателный х должен быть отрицателный результат.
>>1010719Какой именно лисп ты имеешь в виду? И что там ненормального с вводом/выводом
https://atom.io/packages/atom-slimeТаки дошли у кого-то руки, запилили слайм под богомерзкий атом.
>>1012134Хера ты очнулся, проекту 2 года уже.
>>1012181А он как-то до этого на глаза не попадался
Хочу понять как реализованы базовые функции в Scheme/Racket. Как это можно узнать? По репозиторию на гитхабе лазил, но найти там трудновато.
На кложе можно под андроид писать?
>>1015371В целом да, правда не знаю насколько удобно.https://www.infoq.com/news/2015/08/clojure-native-android-appsМожно еще писать под React Native для андроид.
>>1015371Нет, горячая замена кода там чееж жопу сделана. Спасибо дальвику
>>1015371Вроде как есть возможность, но не стоит.
А десктопные приложения на кложе можно писать?
>>1015659На новых девайсях давно уже не dalvik, а йоба поэффективнее.
>>1016710Можно, разрешаю.
>>1016713Тогда тем более
>>1016713Байт-код тот же и механизмы все те же. Просто вместо JIT теперь прекомпиляция.
>>1016813А кросскомпиляция в Котлин есть?
>>1015371Если уже и можно, то не нужно https://gitlab.com/eql/EQL5-Android
>>1016813>Просто вместо JIT теперь прекомпиляция.>ПростоДля динамического языка, который тоннами создает классы в рантайме, это нихуя не просто. Раньше приходилось изъебываться генерацией dex'ов в рантайме и последующей их подгрузкой дальвиком, который далее их джитил. Теперь, насколько я понимаю, задача усложнилась и стала ещё более ресурсоемкой
>>1016835Чиво блять?>>1016813Поправка, с 24 там ART с JIT.
Ошибка? Должно быть просто 2, 3 и 4?
>>1017185В чем ошибка? В том что 1 будет применено к 2,3,4, а не 1,2,3,4?
>>1017203Да. 1 это не аргумент
http://eudoxia.me/article/common-lisp-sotu-2015ченить за 2 года поменялось?для ИТ срок громадный, а для говномамонта общелиспа похоже новье.
Анон, посоветуй гайдов по spacemacs. Второй день не могу вкатиться. Открыл гайд C-h t, а там половина шорткастов не работает, так как у меня evilmode.
>>1018573https://practicalli.github.io/Там 4-й гайд по спейсмаксу.Собственно этот - https://practicalli.github.io/spacemacs/
>>1018720Спасибо.
>>1018573Прям вот двачую. Так то все понятно, проме гита. Сегодня удолил весь проект, и ххуй смог откатить. Заебок.
Вот на Java веб-приложениях что EJB, что Spring структура одна - Controller-Service-Repository, где каждый слой отвечает за своё. Можно и иначе, но будет говнокод.А как на Clojure писать грамотно? Будут ли подобные слои?
Я правильно понимаю что на Common Lisp нельзя определить свой класс как потомок sequence и переопределить для него функции elt, length, etc.. ?
Какие есть для коммон лиспа библиотеки для удобного и современного стиля функционального программирования?Типо как https://github.com/magnars/dash.el для Emacs Lisp.
Все, заебался я с этой БДСМной чистотой. Возвращаюсь в стан динамикобогов.Кложаскрипт тут обсуждается?Какой тулинг сейчас самый модный? Кто-то пишет про figwheel, кто-то про boot-*. Что посоветуете?
>>1019708мап, фильтр и редьюс на клиспе пишется за 3-4 строчки
>>1019893> мап, фильтр и редьюс на клиспе пишется за 3-4 строчкимап(который одновременно ещё и зип) и редьюс там уже есть и такА вот фильтра нет. И партиал-аппликате и функшон-сомпозеи ещё кучи всяких полезностей> пишется за 3-4 строчкиНу так кто-то должен был уже написать
Как то после сиподобных языков кложа сложно заходит, до сих пор не могу въехать в хешмапы.
Читаю сикп. До главы с ковычкой всё было понятно. Но что значит эта кавычка? Видел (error "какой-то текст") Значит одинарная кавычка это не строка, а что-то другое. Но ведёт себя похоже. Вот например тут во втором примере куда-то пропал символ пробела между a и b ходя тожна была пропасть только a если бы эта кавычка была просто строкой.
>>1019974> Читаю сикплучше перед сикпом почитай хотя бы какие-то основы по лиспу или схемеиначе будешь кучу таких дурацких вопросов задавать
>>1019974Ковычко - это цитирование. Нет ковычко - списко вычисляецо (+ 1 2) -> 3.Есть ковычко - списко не вычисляется, а остается как есть '(+ 1 2) -> (+ 1 2).Ковычко 'something - сахар для (quote something). quote - это специальный оператор, предотвращающий вычисление своего оргументо.
>>1020257>quote - это специальный оператор, предотвращающий вычисление своего оргументо.Какой ужас. Все через жопу.
>>1020274Если не ошибаюсь во всех лиспах так. Иначе как сказать интерпретатору, что первый аргумент списка не функция, только пометив список.
>>1020274Не через жопу, а семантика. quote + eval - одна из многих фич лиспа, перекочевавшая в эти ваши JS и PHP.
>>1020439> в эти ваши JS и PHPСам то на чем пишешь?
>>1020498На всем, до чего руки дотянутся.
>>1020521А на эликсире писал?
>>1019017бамп
Сегодня поигрался с коммон лиспом. Понравился синтаксис, но названия функций просто мрак. Потом брмбануло, и я дропнул. Попробую схемку. Анон, что подскажешь? Знаю руби и жс
>>1020917дропнул из-за названий, ты еблан?
>>1020522Только поигрался с ним один вечерок.
>>1020917Clojure.
>>1021009Ну чего сразу обзываться-то? Вот в рубях отличные названия, а в космонавтов говно
>>1021426Блин какие космонавты. В коммоне
>>1021426Как макросы освоишь, так перестанешь обращать внимание на названия и познаешь истинный дзен диска.
>>1020917> названия функций просто мрак>брмбанулочет лол
>>1015108ns.synrc.com/publications/cat/CPS/lisp.pdf
>>1020917Что за названия такие? car / cdr?
>>1024144Точечная пара состоит из двух регистров address и decrement. Эти функции отдают содержимое этих регистров, contents of address/decrement register - car/cdr
>>1020917>Понравился синтаксис>названия функций просто мрак>Знаю руби и жсХеллоуворлдщиков с необсохшим смуззи на губах нам ещё не хватало. >>1021041Ты так со всеми языками """"""""""""знакомишься"""""""""""""""?
>>1020036pcl читал, но дропнул через сотню страниц т.к. захотел класику>>1020257А подробнее про это где пишут? Чтобы прям по шагам разбирали как строчки с этой кавычкой интерпритатор обрабатывает.
>>1024397Читай ебаный SICP
У каких кложуроредакторов есть приличная поддержка удаленной разработки?В atom+nuclide можно добавлять удаленные проекты, в емаксе есть tramp. Что еще есть?
>>1019930>А вот фильтра нет. remove-if же>И партиал-аппликате и функшон-сомпозеЭто уже в александрии есть
>>1024414Зачем тебе что-то ещё?
>>1024418Емакс мне просто не нравится. Нуклиде требует установки серверной части. Хочется и простоту(например, подключение и копирование поверх SSH), и приятный редактор.
>>1021041А хрен ли с этим элексиром дольше знакомиться-то, если уже хорошо знаком с эрлангом и хачкелем?
>>1024360>>1024480
Лисперы, кто-нибудь писал на Joxa иди LFE?
Джентльмены, я тут пытаюсь в СИКП, накатал свою парашу в scheme, а как запустить своё творение - не могу понять.
Из терминала или из среды Dr. Racket. В терминале можно raco make <имя файла> или raco exe <имя файла>Только узнал, что raco может декомпилировать байткод, надо будет попробовать.
>>1024505А куда ты его катал, еслм не знаешь как запустить? Реплом не польхуешься что ли сука?
>>1024500Не нужны
>>1024537Скачал с сайта MIT Scheme и начал писать, но от него ни ответа ни привет, даже числа складывать не хочет.
>>1024542Ну дык результат вычисления выражений только в репле сам выводится, а ты ж небось ему файл скармливаешь. В любом случае, рекомендую скачать drRacket как более дружелюбную для новичков среду
>>1024538Виртуальная машина Эрланга очень даже располагает писать под нее. Какие сейчас лиспы живы кроме кложур?
>>1024542Не то скачал. Качай Racket, он современный, все инструменты есть.
>>1024548Общелисп только и жив.
>>1024557где-то вдали заплакал Рич ХиккиНо как же все эти хипстеры с ливкодингом на реагенте? Все уже умерли?
>>1024557Очень смешно. Где вакансии? Где компании его использующие? Где проекты? Где сообщество?
>>1024558>хипстеры с ливкодингом на реагентея тут
>>1024558Не знаю, такими эзотерическими штуками не интересуюсь.
>>1024560В гугле забанили?
>>1024562Лейн или бут?
>>1024565Это были не вопросы.
>>1024548Интересно было бы пощупать что-то статически типизированное, компилирующееся в BEAM. Был YHC, но он сдох. Грустно, хоть сам садись и пиши.
>>1024403Так его я и перестал понимать как дошёл до ковычек
>>1020368> Иначе как сказать интерпретатору, что первый аргумент списка не функция, только пометив список.(list a b c)
>>1024635f(x) = x, что тут непонятного?мимобайтоеб
>>1024397> А подробнее про это где пишут?Смотри здесь: >>1024134
Решил почитать СИКП и в первой же главе застрял.Упражнение>Какой результат напечатает интерпретатор в ответ на каждое из них?Что это за строчка как мне её понять?
>>1024922Наркоман штоле аль не выспался? Равенство конечно. Печатать будет булевские значения обычно, True аль False.
>>1024928Ну у меня же выше a равно трем, а b четырем.Разве нет?
>>1024931Ладно. В общем, по скольку, они неравны то значением этого выражения будет False.
>>1024934Я понял наверно, спасибо.
Может и мне поможете?>>1024961В чем моя проблема?
Не могу в racket считать ввод с терминала. Как-то там все запутано. Необходимо получить ввод 3 чисел с терминала в функцию, то есть функция принимает 3 аргумента. Пытался делать так (function (read-line)), но ничего не получается. Может нужно вставить read-line в объявление функции?
>>1024922a == b
http://www.lambdanative.org/Пробовал кто?
>>1025323Картинка выглядит сомнительно, да еще и исследование 2000 года.
>>1024692Предлагаешь ещё одну книг прочитать? Не нашёл в оглавлении упоминания про кавычки.
>>1025445Предлагаю перед чтением любой книги открывать черепную коробку и вставлять туда мозг.
>>1025323Индусы пишут на лишпе?
>>1025500Университет Британской Колумбии (UBC), на курсере есть их курсы, по программе HTDP, на Racket.
>>1025445Это не такое важное, чтобы в оглавлении было.
>>1025445Глава 1
Думаю вкатиться в sicp, затем в кложу. Насколько сильно схем и кложа отличаются?
>>1027567Примерно как си и жаба. Или, что точнее, как схема и жаба.
http://www.red-lang.org/2017/07/063-macos-gui-backend.html
Вопрос от ньюфага, чтобы запустить scheme мне нужно его добавить в DrRacket извне? Я запустил учебный язык, но это не совсем то, не хочет принимать (define x (cons 1 2)), например.
Это что за хуйня
>>1027904>HomeLispЭто что за хуйня?
>>1027904А что это за значок? Ты что халфлюфе третий делаешь?
>>1027918Лисп для домохозяек.
>>1027922>>1027918Дайте ссылку на норм лисп. 24 часа назад в программирование вкатился
>>1027901Первая строка кода определяет используемый язык, для Racket будет #lang racket. Можно еще менять в настройках среды Dr. Racket.
>>1027923https://clojure.org/
>>1027931read: #lang not enabled in the current contextне помогло
>>1027939Открываем официальный сайт и смотрим примеры кода. Видим следующее#lang racket(require 2htdp/image) ; draw a picture(let sierpinski ([n 8]) (cond [(zero? n) (triangle 2 'solid 'red)] [else (define t (sierpinski (- n 1)))http://racket-lang.org/
>>1027940Да я только что сам разобрался, спасибо.В режиме ученика нельзя прописывать lang просто.
Решал задачки с 4clojure.com. Наткнулся на такую:((fn foo [x] (when (> x 0) (conj (foo (dec x)) x))) 5)что будет на выходе?Ответ: [5 4 3 2 1] - какого хуя? Разве функция foo не должна сработать до функции conj? Если так, то foo должно вызваться 5 раз, и затем, когда в foo передастся (dec 1), должна начаться свертка рекурсии, функция conj сработает для х = 1 и пустого вектора, затем для х = 2 и вектора [1], добавив 2 в конец нового вектора, т.е. уже будет [1 2] и т.д. Т.е. на выходе имеем вектор [1 2 3 4 5]. Так какого хуя ответ - [5 4 3 2 1]?Разве в кложе не аппликативный порядок вычислений, а нормальный?
>>1030060А, все понял. Просто я тупой.Аппликативный порядок как раз и подразумевает, что сначала вычисляется conj, а затем вычисляется foo. И каждый раз идет присоединение к (foo x) значения x + 1. Спасибо за помощь!
Чет сложно в кложуру вкатиться.Емакс страшный, лайт тейбл мертвый, найткод аскетичный, а в атоме все через задницу, даже proto-repl нормально не работает.Не опускаться же до вима.
>>1030065http://spacemacs.org/
>>1030067И спейс, и акву пробовал — какое-то оно для пришельцев. Я несколько раз пытался вкатиться в емаксы, каждый раз хотелось убежать.
>>1030070Саблайм с плагином SublimeRepl.
>>1030070вкатывайся еще, с первого раза мало кто осиливает
>>1030065И редактор, в общем-то, не самая большая проблема. Самая большая проблема в том, что я не могу понять, как заставить связку редактор-консоль-figwheel-cljsrepl-браузер работать.Запустил простой проект. `lein figwheel` включается в режиме cljs-repl, выражения вида `(.log js/console "Hello World")` дают ожидаемый результат в браузерной консоли.LightTabe подключается с этому фигвилу, но в режиме clj-repl — в результате `(printl "Hello world")` печатает строку в терминале, а не в браузере, и js/X объекты мне не доступны. Подключение через nREPL в атоме приводит к такому же результату.Если же запустить proto-repl, и уже в нем вручную импортировать figwheel-sidecar и запустить сам фигвил — все работает как надо. Но делать так каждый раз не весело будет.
>>1030203А зачем тебе печатать строку в браузере?
>>1030216Строка — самый простой пример. Меня больше интересуют извращения с re-frame/dispatch.Допустим, я хочу протестировать некую последовательность событий. Как мне это сделать?Вариант 1: протыкать все кнопки вручную.Вариант 2: сохранить в редакторе`#_(dispatch-some-events)` и исполнять это выражение в cljs-repl по мере надобности.
>>1030065Похапэ ждет тебя.
>>1030203ну вроде как фигвил имеет свой собственный репл независимый от cljs-repl. Поэтому там проблемы с их линковкой. Если получится завязать фигвиловский репл с каким-нибудь редактором то отпиши в тред плизики :3
>>1030446И так убил на это слишком много времени, больше возиться как-то не хочется.Пока остановился на таком варианте:В терминале — `rlwrap lein repl`, `(figwheel-sidecar.repl-api/start-figwheel!)`.В атоме — подключаю proto-repl через nREPL, `(cljs-repl)`.Многовато лишних движений(аж целых 2!), репл работает медленновато, но терпимо. Еще надо протестировать, как эта связка поведет себя при потере сети.
Почему потенциал по написанию DSL на лиспе обычно так и не используется, а код пишут именно на лиспе?
>>1031095Может потому, что это лисперы любят делать eDSL?
>>1031095[:span {:class "foo"} "bar"] — что это, если не DSL?DSL не обязан быть полностью отличным от основного языка. Кому надо — могут обмазываться reader macros и превратить лишп в хачкель, но часто ли это требуется?
>>1031637>[:span {:class "foo"} "bar"]Как это прочитать? Вектор объектов?
>>1031674Это читается "декларация html-элемента, который должен отрендериться как <span class="foo">bar</span>". Синтаксически это просто гетерогенный вектор, но по сути это DSL.
Я в емаксе работаю, думаю даже не буду заморачиваться с попытками фигвил подружить и редактор, там какая-то черная магия
Насколько разработка приложений на лиспе медленней аналогичных на питоне. И насколько она быстрее(быстрее ли) чем разработка на java?
>>1033356Кода на лиспе значительно меньше, но быстрее ли его писать, думаю не сильно, на джаве можно огромными кучами кода ворочать в всяких модных IDE, при должном скилле думаю весляр с 20 летним опытом на жабе будет офигенски быстро генерить кодяру для какого-то фреймворка.Лисп не за скорость разработки любят, за скорость разработки можно любить пайтон и руби и я слышал перл
Интересно, а кто-нибудь тут работает Clojure-программистом? На всю Россию одна вакансия в Москве и всё. Вроде и хочется изучить, но какой профит?
>>1033356В современном мире скорости написания примерно одинаковы: в лиспе код за тебя пишут макросы, в других языках - IDE.
>>1034785Я говорил не про скорость написания кода, а про скорость разработки приложений.
>>1035021Дурацкий вопрос, субъективщина. Сам попробуй и прикинь нравицца тебе или не
>>1011075А какие именно у хаскеля проблемы с IO?
В чем фишка лиспа? Сейчас же в каждом втором языке есть лямбда-выражения. Чем он лучше скажем JavaScript'а?
>>1038632>фишка лиспаHomoiconicity via S-expressions.
>>1038632Язык для операционной системы Emacs.
>>1038632Метапрограммирование, компиляция кода в риалтайме, интерактивность системы с горячей подгрузкой кода.
>>1034785>В современном мире скорости написания примерно одинаковыНет конечно. У лимпа цикл "исправить ошибку - перезапустить" гораздо меньше, за счет этого скорость разработки приложений выше.
>>1038633И какой от этого профит?>>1038684Лучше бы в этой системе был InelliSense и рефакторинг.>>1038741>Метапрограммирование,Есть в C++>компиляция кода в риалтайме,Есть в Java и C#.>интерактивность системы с горячей подгрузкой кода.Есть в JavaScript и Python, в Java тоже можно подгружать классы.
>>1038802>Есть в ...В лиспе оно есть все сразу, сделано нормально, и органически сочетается друг с другом, благодаря чему возникает синергетический эффект.
>>1038820Синтаксис ебанутый, неудобные скобочки везде, где надо и не надо.
>>1038802>И какой от этого профит?-> >>1038741сам попробуй