Действительно ли изучение LISP полезно во все эти дни? [закрытый]

@Martin: можно ли уточнить мыслительные процессы позади него?

это не могло бы быть столь же явно как присаживание и разработка Нотация "большого О" для решения, но это создает осведомленность о проблеме - и это регулирует Вас к поиску более эффективного ответа, и далеко от проблем в подходах Вы могли бы взять. например, O (n*n) по сравнению с чем-то быстрее, например, поиском слов сохранил в списке по сравнению с сохраненным в trie (изобретенный пример)

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

27
задан Davey 23 October 2009 в 17:02
поделиться

12 ответов

Это стоит учиться в целях «расширения разума», но в наши дни это не так популярно для создания приложений.

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

То, как Lisp одинаково относится к структурам данных и структурам программы, предлагает удивительную мощь, которую стоит понимать.

Его история захватывающая, и у него есть сформировали мир информатики.

Обязательно ознакомьтесь со статьей Аблсона и Сассмана Структура и интерпретация компьютерных программ в MIT OpenCourseware

Clojure: Lisp на виртуальных машинах .NET и Java

GNU CLISP.

CMU Common Lisp

14
ответ дан 28 November 2019 в 04:10
поделиться

Да. Здесь я буду придерживаться Common Lisp, хотя Scheme также является превосходным языком, которому есть что рекомендовать.

В Common Lisp у вас есть обширный мультипарадигмальный язык, который предоставляет некоторые вещи, которые либо не существуют широко за пределами семейства языков Lisp, либо ограничены CL и даже более малоизвестными / нишевыми языками.

Первая особенность, которую вы можете получить так или иначе из CL, Scheme и многих других диалектов, - это настоящая макросистема.

Я говорю «настоящая», потому что система намного более полная, гибкая и надежная, чем, скажем, макросы препроцессора C. Чрезвычайно сложно заставить макросы CPP выполнять даже простые вещи (например, менять местами значения двух переменных, или создание конструкции foreach ) надежным способом, но с макросами Lisp это тривиально. Оказывается, это очень мощный инструмент для введения новых абстракций и отказа от «шаблонного» кода.

Вторая функция, которая эффективно ограничена Common Lisp, - это CLOS, объектная система Common Lisp. Несмотря на название, это не обычная объектно-ориентированная система, подобная системе Java, с методами, являющимися частью определения класса. Вместо этого он обеспечивает полиморфизм через «общие функции», к которым прикрепляются методы, и по умолчанию позволяет выполнять множественную отправку.

Я предпочитаю CLOS более обычному подходу к объектной ориентации, так как он создает ряд "шаблонов" (как шаблон Visitor) совершенно не нужны, и потому что расширение существующих универсальных функций очень просто; другие ненавидят его, потому что он требует чрезвычайно кавалерийского подхода к инкапсуляции и потому, что расширение общих функций становится, возможно, слишком простым. В любом случае, CLOS достаточно отличается, и я думаю, что его стоит изучить только из-за другой точки зрения, которую он предоставляет.

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

Наконец, для многих классов задач Lisp - отличный практический язык. Он обеспечивает хорошую производительность (обычно не так быстро, как C, но значительно быстрее, чем большинство «языков сценариев»), безопасность, автоматическое управление памятью, приличную «стандартную библиотеку» функций и огромные возможности для простого расширения.

30
ответ дан 28 November 2019 в 04:10
поделиться

Зависит от книги. Какую книгу?

Common Lisp стоит изучить сегодня, потому что это один из немногих языков, которые в значительной степени «делают все». Если есть какая-то распространенная или малоизвестная идиома или техника программирования, скорее всего, в Common Lisp она уже есть в той или иной форме. Практически единственное, чего не хватает CL - это продолжений (многие утверждают, что они не нужны, но это бесполезно, если вы хотите их исследовать).

Любой, кто потратит сколько-нибудь серьезное время на написание на Common Lisp, выйдет измененным в некотором роде, обычно к лучшему, ИМХО.

Даже если вы не можете перенести все концепции Lispy, которые вы изучаете и используете, в других средах, знание о них и о том, как они работают, все равно полезно.

12
ответ дан 28 November 2019 в 04:10
поделиться

Good programmers expose themselves to as many different programming paradigms as they can - not as many programming languages as they can.

The LISP family (there are several variants) is very worth while getting to know. Your objective should be getting your head wraped around functional programming and the lambda calculus - the paradigm that LISP is based on. Focus less on becomming an "ace" LISP programmer (that could take years).

If you find functional programming "flips your switch", try having a look at PROLOG too - here the paradigm is based on evaluation of Horn Clauses (predicate logic).

I may have spent the last 20 years earning a living as a COBOL programmer (OMG - they still have those!), but I think I am a better programmer because of the time spent learning what LISP, and a number of other programming languages were really all about.

Have a blast...

10
ответ дан 28 November 2019 в 04:10
поделиться

Here's a Google Tech talk worth watching about a company currently producing large, complex software for the airline industry in Common Lisp:

Lisp for High-Performance Transaction Processing (The video is now unavailable. Here's some note by Zach Beane.)

Other topics are mentioned in that video, including Clojure, a new variant of Lisp for the JVM (some work is now being done to develop Clojure for the CLR too, but that is not as far along), which is worth checking out for the way it addresses concurrency issues. See the Clojure site at:

http://clojure.org/

and, in particular at first, check out the link in the upper right on that page to some excellent Screencasts with overviews of the concurrency issues and Clojure features.

If you get interested in Lisp, and the book you found is not that great (I have an old one myself that didn't do much for me), Paul Graham's book On Lisp is available free at http://www.paulgraham.com/onlisp.html and is very good. The general Lisp idea is the same for Common Lisp or Scheme or Emacs Lisp or Clojure, but the specifics will be different - so keep that in mind if reading Graham's book, which focuses mostly on Common Lisp (with some mentions of Scheme specifics.) On Lisp is probably not the best beginner book, but it's worth going through it and just skimming over specifics you're not ready to follow in detail yet to see what is there, particularly with regard to macros, which On Lisp really explores.

8
ответ дан 28 November 2019 в 04:10
поделиться

Изучение LISP - хороший способ эффективно изучить функциональное программирование, и его часто используют в качестве вводного языка для студентов бакалавриата. Многие люди считают, что Структура и интерпретация компьютерных программ , в которой используется диалект Scheme Lisp, - это книга, которая должна быть на полке каждого программиста.

Пол Грэм был большим сторонником Лиспа, и в его книге Хакеры и художники , он описывает, как он использовал мощь Lisp, чтобы доминировать над конкурентами при создании ViaWeb для магазинов Yahoo.

В другом месте я видел диалекты Lisp, широко используемые в аэрокосмической промышленности в качестве инструментов создания сценариев для интеграционных фреймворков, таких как Comet и AML . Lisp всегда будет привязан к ранним экспериментам с ИИ в 1950-х годах.

2
ответ дан 28 November 2019 в 04:10
поделиться

Он ( Common Lisp ) все еще широко используется учеными, работающими в области искусственного интеллекта. Схема - это Lisp-подобный язык, который также используется многими (большинством?) Отделов CS. Лично я считаю, что изучение Lisp имеет смысл независимо от того, используете ли вы его в конечном итоге. Это классический язык, который мы многому научились со временем.

2
ответ дан 28 November 2019 в 04:10
поделиться

As other have alluded to, Lisp isn't that popular anymore for general programming, and it definitely (IMO) has some major problems for writing real systems in, but of course others disagree (for instance much of ITA's software is written in Lisp, and they make crazy bank).

Even if you never write a 'real' program in Lisp, it is absolutely worth learning. There are many programming techniques originally pioneered in Lisp that, knowing them, will help you write better code in Python, Perl, Ruby, ML, Haskell, and even C++. For instance, check out Higher Order Perl, which shows how to do all kinds of amazing tricks in Perl; to quote the introduction "Instead of telling you how wonderful Lisp is, I will tell you how wonderful Perl is, and in the end you will not have to know any Lisp, but you will know a lot more about Perl. [...] Then you can stop writing C programs in Perl. I think you will find it to be a nice change. Perl is much better at being Perl than it is at being a slow version of C."

And there are some great books out there that use Lisp, and it will be easier to understand them if you know the language - SICP, Norvig's Paradigms of Artificial Intelligence Programming, and The Reasoned Schemer all come to mind as must-reads.

2
ответ дан 28 November 2019 в 04:10
поделиться

Это похоже на вопрос, «стоит ли изучать C в наши дни веб-программирования?». Только вам решать, стоит ли оно того. Вы должны спросить себя: чего я пытаюсь достичь, читая книгу?

Изучение новых языков иногда бесполезно в практическом понимании вещей (возможно, вы не собираетесь использовать LISP когда-либо в своей жизни), но в долгосрочной перспективе он будет полезен из-за знаний , полученных с помощью различных парадигм, с которыми вы не слишком знакомы, - и вы могли бы использовать некоторые из тех, что вы узнали в то, что вы уже используете сегодня.

1
ответ дан 28 November 2019 в 04:10
поделиться

It's been awhile since university, but after I took a 3rd year CS course that required learning Lisp and writing Lisp programs, writing and thinking recursively was a snap. Not that I had problems with recursion before the course, but afterwards, it was 2nd nature. I also used CLOS in the course (University of Toronto), but it was so long ago, I barely remember what I did.

1
ответ дан 28 November 2019 в 04:10
поделиться

См. этот вопрос, и особенно третий ответ, тот, который объясняет, что Lisp хорош для решения сложных проблем, тех проблем, которые трудно разложить на более управляемые модули, если вы попытаетесь решить их на другом языке. Другими словами, если вы заинтересованы в изучении способов решения запутанных проблем, которые включают, скажем, обработку естественного языка или агрегирование знаний ... тогда, да, Лисп может быть вам полезен.

4
ответ дан 28 November 2019 в 04:10
поделиться

Изучите Lisp, чтобы узнать о макросах, а этот код - это данные, и узнать, что вы можете достичь просветления без самобичевания C ++.

Изучите Common Lisp, чтобы узнать о макросы чтения и макросы компилятора. Я не знаю другого языка, на котором они есть.

Изучите схему для продолжения.

Изучите Clojure, потому что он сделает Java устаревшим: -)

4
ответ дан 28 November 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: