Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Почему я должен учить Lisp?
Я действительно чувствую, что должен учиться Lisp , и есть много хороших ресурсов, которые помогут мне это сделать.
Меня не пугает сложный синтаксис, но где в "traditional commercial programming" я найду места, где было бы целесообразно использовать его вместо процедурного языка.
Есть ли там коммерческое приложение-убийца, которое было написано в Lisp ?
Lisp - это большой и сложный язык с большой и сложной средой выполнения для его поддержки. По этой причине Lisp лучше всего подходит для больших и сложных задач.
Итак, сложная проблема-это не то же самое, что сложная . Сложная проблема-это та, в которой много мелких деталей, но которая не является трудной. Написание системы бронирования авиабилетов-это сложный бизнес, но с достаточным количеством денег и программистов это не так уж сложно. Понимаете разницу?
Сложная проблема-это та, которая запутана, та, где традиционный разделяй и властвуй не работает. Управление роботом, работа с данными, которые не являются табличными (например, языки), или высокодинамичные ситуации.
Lisp действительно хорошо подходит для задач, где решение должно быть расширяемым; классический пример-текстовый редактор emacs. Она полностью программируема, и поэтому сама по себе является средой программирования.
В своей знаменитой книге PAIP Норвиг говорит, что Lisp идеально подходит для исследовательского программирования. То есть, Программирование решения проблемы, которая не совсем понятна (в отличие от системы онлайн-бронирования). Другими словами: сложные проблемы.
Кроме того, изучение Lisp напомнит вам о чем-то фундаментальном, что было забыто: о разнице между фон Нейманом и Тьюрингом. Как мы знаем, модель вычислений Тьюринга является интересной теоретической моделью, но бесполезной в качестве модели для проектирования компьютеров. Фон Нейман, с другой стороны, разработал модель того, как должны были работать компьютеры и вычисления: модель фон Неймана. Главным в модели фон Неймана является то, что у вас есть только одна память, и вы храните там и свой код, и свои данные. Обратите внимание, что программа Java (или C#,, или как вам больше нравится) является проявлением модели Тьюринга. Вы устанавливаете свою программу конкретно, раз и навсегда. Тогда вы надеетесь, что сможете справиться со всеми данными, которые будут брошены на него.
Lisp поддерживает модель фон Неймана; нет резкой, заранее определенной границы между кодом и данными. Программирование в Lisp открывает ваш разум перед силой модели фон Неймана. Программирование в Lisp заставляет вас увидеть старые концепции в Новом Свете.
Наконец, будучи интерактивным, вы научитесь взаимодействовать с вашими программами по мере их разработки (в отличие от компиляции и запуска). Это также изменит способ программирования и то, как вы смотрите на Программирование.
С этим вступлением я могу наконец предложить ответ на ваш вопрос: найдете ли Вы места, где он затмевает "traditional" языков?
Если вы продвинутый программист, вам нужны продвинутые инструменты. И нет инструмента более продвинутого, чем Lisp. Или, другими словами: ответ-да, если ваши проблемы трудны. Иначе и быть не может.
Одно из основных применений Lisp-это искусственный интеллект. Один мой друг в колледже прошел выпускной курс AI и для своего основного проекта он написал решатель "отбоя" в Lisp. Несколько версий его программы использовали немного разные процедуры AI, и тестирование на 40 или около того компьютерах дало довольно аккуратные результаты (я хотел бы, чтобы это было где-то в интернете, но я не думаю, что это так).
Два семестра назад я использовал Scheme (язык, основанный на Lisp), чтобы написать интерактивную программу, которая имитировала рутину "Who's on First" Эббота и Костелло. Вводимые пользователем данные сопоставлялись с некоторыми довольно сложными структурами данных (напоминающими карты на других языках, но гораздо более гибкими), чтобы выбрать подходящий ответ. Я также написал процедуру для решения головоломки слайдов 3x3 (алгоритм, который легко можно было бы распространить на более крупные головоломки слайдов).
Таким образом, обучение Lisp (или схема) может не дать много практических применений за пределами AI, но это чрезвычайно ценный опыт обучения, как утверждали многие другие. Программирование на функциональном языке, таком как Lisp, также поможет вам думать рекурсивно (если у вас были проблемы с рекурсией на других языках, это может быть большим подспорьем).
сложный синтаксис ??
Синтаксис для lisp невероятно прост .
Убийца приложение написано в lisp: emacs . Lisp позволит вам расширить emacs по желанию, чтобы сделать почти все, что вы можете придумать, что может сделать редактор.
Но вы должны выучить только lisp, если хотите , и вы можете никогда не использовать его на работе, но это все равно потрясающе.
Кроме того, я хочу добавить: даже если вы найдете места, где lisp будет иметь смысл, вы, вероятно, не убедите никого другого, что его следует использовать снова java, c++, c#, python, ruby, и т.д.
Я программировал в Lisp профессионально около года, и это определенно стоит изучить. Вы будете иметь беспрецедентную возможность удалить избыточность из вашего кода, имея возможность заменить весь шаблонный код функциями, где это возможно, и macros, где нет. Вы также сможете получить доступ к беспрецедентной гибкости во время выполнения, свободно переводя код и данные. Таким образом, ситуации, когда действия пользователя могут вызвать необходимость динамического построения сложных структур, - это то, где Lisp действительно сияет. Популярные расписания рейсов авиакомпаний написаны в Lisp, а также есть много CAD/CAM в Lisp.
Lisp очень полезно для создания маленького DSLs. У меня есть копия Lisp в коробке, запущенной на работе, и я написал немного DSLs, чтобы опросить базы данных сервера SQL и генерировать слои данных и т. д. В C#. весь мой код котла теперь записан в lisp macros, что выводит в C#. я генерирую HTML, XML, все виды вещей с ним. Хотя я хотел бы использовать Lisp для повседневного кодирования, Lisp может принести практическую пользу.
Если вам нравится программирование, вы должны изучать Lisp для чистой радости от этого. XKCD прекрасно выражает интеллектуальное просветление, которое следует за этим. Обучение Lisp - это для программиста то же, что медитация для буддийского монаха (и я имел в виду это без какого-либо богохульного оттенка).
Любой язык выглядит намного сложнее, когда он не использует общие правила отступов языка. Когда вы следуете им из Lisp, вы видите, как он довольно легко выражает структуру синтаксического дерева (заметьте, это не совсем правильно, потому что предварительный просмотр немного лежит; r должны совпадать с fns в рекурсивном аргументе quicksort):
(defun quicksort (lis)
(if (null lis)
nil
(let* ((x (car lis))
(r (cdr lis))
(fn (lambda (a)
(< a x))))
(append (quicksort (remove-if-not fn
r))
(list x)
(quicksort (remove-if fn
r))))))
От http://www.gigamonkeys.com/book/introduction-why-lisp.html
Один из наиболее часто повторяющихся мифы о Lisp таковы, что это "dead." Хотя это правда, что Common Lisp не является таковым так же широко используется, как, скажем, Visual Basic или Java, это кажется странным описывать язык, который продолжает использоваться для новых разработок и это продолжается чтобы привлечь новых пользователей, как "dead." некоторые последние истории успеха Lisp включают в себя Viaweb Пола Грэма, который стал Yahoo магазин, когда Yahoo купил его компания; стоимость авиабилетов ITA Software система ценообразования и покупок, QPX, используется онлайн-продавцом билетов Orbitz и другие; игра непослушной Собаки для PlayStation 2, Джак и Дэкстер, которые в значительной степени написана в виде доменный Lisp диалект непослушный Собаку придумали под названием GOAL, чья компилятор сам пишется на общем языке Lisp; и Roomba, автономный роботизированный пылесос, программное обеспечение которого пишется в L, a вниз совместимое подмножество общего Lisp. Возможно, еще более красноречивым является то, что рост общего-Lisp.net Web сайт, на котором размещен open-source Common Lisp проекта, а также количество местных Lisp групп пользователей, которые возникли за последние пару лет.
Я обнаружил, что изучение нового языка всегда влияет на ваш стиль программирования на языках, которые вы уже знаете. Для меня это всегда заставляло думать по-разному, чтобы решить проблему на моем основном языке, который является Java. Я думаю, что в целом это просто расширяет ваш горизонт в плане программирования.
В восьмидесятых годах я учился в колледже на восьмом курсе. Несмотря на грокинг всех концепций, представленных в классе, я остался без какой- либо оценки того, что делает lisp великим. Я боюсь, что многие люди смотрят на lisp как на просто еще один язык программирования, что и сделал для меня этот курс в колледже много лет назад. Если вы видите, что кто-то жалуется на синтаксис lisp (или его отсутствие), есть хороший шанс, что это один из тех людей, которые не смогли понять величие lisp. Я был одним из этих людей очень долгое время.
Только спустя два десятилетия, когда я вновь пробудил свой интерес к lisp, я начал понимать, что делает lisp интересным-во всяком случае, для меня. Если вам удастся выучить lisp без того, чтобы ваш ум взорвался closures и lisp macros, вы, вероятно, упустили главное.
"Lisp стоит изучить для глубокого опыта просветления, который вы будете иметь, когда наконец получите его; этот опыт сделает вас лучшим программистом для rest ваших дней, даже если вы никогда не используете сам Lisp много."
-- Эрик С. Раймонд, "How to Become a Hacker"
http://www.paulgraham.com/avg.html
Изучение LISP / Scheme может не дать вам никакого увеличения пространства приложения, но это поможет вам лучше понять функциональное программирование, его правила и исключения.
Стоит потратить время только на то, чтобы узнать разницу в красоте шести вложенных чистых функций и кошмаре шести вложенных функций с побочными эффектами.
Изучение lisp выставит Javascript в совершенно ином свете! Lisp действительно заставляет вас понять как рекурсию, так и всю "функции как объекты первого класса"-парадигму. Обеспечивает доступ к наиболее важным увидеть прекрасную статью на схема против Javascript . Javascript-это, пожалуй, самый важный язык на сегодняшний день, поэтому понимание его лучше всего чрезвычайно полезно!
Я согласен, что Lisp - это один из тех языков, которые вы никогда не сможете использовать в коммерческих целях. Но даже если вы этого не сделаете, изучение этого определенно расширит ваше понимание программирования в целом. Например, я выучил Prolog в колледже, и хотя после этого я никогда не использовал его, я дал мне более глубокое понимание многих концепций программирования и (иногда) более высокую оценку языков, которые я использую.
Но если вы собираетесь выучить it...by всеми средствами, читайте дальше Lisp
Ладно, я могу быть странным, но мне действительно не очень нравятся эссе Пола Грэма, которые & на Lisp-это действительно трудная книга, если у вас уже нет некоторого понимания общего Lisp. Вместо этого я бы сказал, что иду на практический здравый смысл Зибеля Lisp . Что касается "killer-apps", Common Lisp, похоже , находит свое место в нишевых магазинах, таких как ITA, поэтому, хотя нет приложения, синонимичного CL, как Rails для Ruby, есть места в промышленности, которые используют его, если вы немного копнете.
Сложный синтаксис? Красота lisp заключается в том, что он имеет смехотворно простой синтаксис. Это просто список, где каждый элемент списка может быть либо другим списком, либо элементарным типом данных.
Это стоит изучить, потому что это повышает вашу способность кодирования думать о функциях и использовать их как просто другой тип данных. Это улучшит ваш способ кодирования на императивном и / или объектно-ориентированном языке, поскольку позволит вам быть более гибкими в ментальном плане в отношении структуры вашего кода.
Убийственное приложение? Franz Inc. есть длинный список историй успеха, но этот список включает только пользователей AllegroCL... Возможно, есть и другие. Мой любимый-это история о непослушной собаке, так как я был большим поклонником игр Crash Bandicoot.
При изучении общих Lisp, я рекомендовал бы практические общие Lisp . У него есть практический подход, который, по крайней мере, для меня сделал его легче, чем другие книги, которые я смотрел.
Сегодня вы можете использовать Clojure для написания тестов и сценариев поверх Java VM. Хотя есть и другие языки Lisp, реализованные на JVM, я думаю, что Clojure лучше всего интегрируется с Java.
Бывают случаи, когда сам язык Java становится на пути написания тестов для кода Java (включая "традиционное коммерческое Программирование"). (Я не имею в виду, что в качестве обвинительного акта Java-другие языки страдают от той же проблемы-но это факт. Поскольку это тема, а не Java, я не буду вдаваться в подробности. Пожалуйста, не стесняйтесь начинать новую тему, если кто-то хочет ее обсудить.) Clojure устраняет многие из этих препятствий.
Lisp можно использовать везде, где вы используете традиционное Программирование. Это не так уж и отличается, просто Он более мощный. Написание веб-приложения? вы можете сделать это на Lisp, написав настольное приложение? вы можете сделать это на Lisp, что угодно, вы, вероятно, можете сделать это на Lisp, или Python, или любом другом универсальном программировании (есть несколько языков, которые подходят только для одной задачи).
Самым большим препятствием, вероятно, будет принятие вашего босса, ваших коллег или ваших клиентов. Вот с этим-то вам и придется работать вместе. Выбор прагматичного решения, такого как Clojure , которое может использовать текущую базу установки инфраструктуры Java, от JVM до библиотек, может помочь вам. Кроме того, если у вас есть программа Java, вы можете создать архитектуру плагинов и написать для нее Clojure плагина и в конечном итоге написать половину своего кода в Clojure.
Это тема, которую я сам обдумывал некоторое время, но я действительно не пришел к решению, так как обычно время является главной проблемой... ;)
И так как я не могу найти эти ссылки sofar в этом посте я добавляю их для общественного интереса:
История успеха и неудачи: Шепелявит на JPL
Действительно впечатляющая история успеха: Lisp используется в корпорации Orbitz
Сравнение и анализ целесообразности использования Lisp вместо Java: Lisp как альтернатива Java