Подтвердить что ты не робот

Схема или общий Lisp?

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

4b9b3361

Ответ 1

Как и многие другие вещи, зависит от того, что вы хотите сделать.

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

Если вы просто хотите учиться и играть с помощью Lisp, или даже создавать умеренно сложные программы, я бы сказал, что Scheme, вероятно, лучше. Он получил более чистую, более четкую (меньшую) стандартную библиотеку, и есть много ресурсов, которые предназначены для ученика (не для того, чтобы их не было для CL).

Если вы хотите, чтобы сырая мощность в тоннах библиотек (много очень хорошо написана) и набор инструментов стандартного (как стандарт реализации CL) библиотеки, которая поставляется с CL, тогда вам будет лучше.

В качестве альтернативы я бы предложил Clojure. Это относительно новый язык (< 5 лет), но он получил много для этого. Он создан для concurrency, с множеством примитивов, которые облегчают запись программ с сохранением состояния, если вам нужно иметь состояние. И множество других льгот, хотя опять же, стандартная библиотека умудряется оставаться маленькой.

Это также на JVM, поэтому у вас есть доступ ко всем библиотекам, которые вы могли бы использовать, если бы вы использовали Java, если вам понадобится какой-либо из них, а также необработанная скорость, которую предлагает JVM, у вас под рукой.

Однако это новый язык с новым (но очень дружелюбным!) сообществом. Если вы просто хотите окунуть пальцы в пул Lisp, я бы сказал, что Scheme - ваш лучший выбор. Если вы хотите сделать все, мое предпочтение и моя любовь Clojure.

РЕДАКТИРОВАТЬ Честно говоря, вы не ошибетесь ни с одним из трех. Может быть, лучше в зависимости от того, что вы хотите сделать, и я бы рекомендовал Clojure для всех.

Ответ 2

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

Различные реализации имеют разные сильные стороны. Если вам нужен бесплатный открытый исходный код, Clozure Common Lisp (CCL) (не путать с "Clojure" ) и Steel Bank Common Lisp (SBCL) - это хорошие универсальные реализации. Существуют также коммерческие реализации, наиболее известными из которых являются Allegro Common Lisp и LispWorks. Для удобства Windows Corman Common Lisp имеет полезные возможности. Для встраивания Embedded Common Lisp (ECL) отлично (вам не нужно использовать его встроенным способом). Если вы хотите, чтобы общий Lisp, который компилируется на виртуальную машину Java, существует Armed Bear Common Lisp (ABCL). См. Статью для других; который вы хотите, зависит от ваших индивидуальных обстоятельств.

Ответ 3

Если вам нужна мощность и гибкость, вы можете использовать Common Lisp.

Если вы хотите, чтобы все было чисто и просто, вы идете с помощью схемы.

До сих пор я доволен SBCL.

Ответ 4

Это старый.) Emacs или vi? KDE или Gnome? Красный или белый?

Самое большое различие между ними состоит в том, что Scheme стремится сосредоточиться на функциональном программировании; некоторые авторы подчеркивают функциональное программирование в Common Lisp, например, Paul Graham, и если я пишу Common Lisp, я следую их советам.

Я предпочитаю Scheme, потому что это имеет для меня больше смысла. Я обнаружил, что сообщество Scheme, особенно окружающее свободное программное обеспечение, гораздо больше сосредоточено на бесплатном программном обеспечении. Подумайте, если это важно для вас. Вопреки распространенному мнению, Common Lisp - очень популярный язык, но он больше всего позади закрытых корпоративных дверей. Это был большой фактор для меня, чтобы отвернуться от Common Lisp: когда сообщество не так открыто, вы не найдете столько возможностей для помощи и библиотек.

Что касается реализаций, я бы рекомендовал Guile, если вы пользователь GNU/Linux. Другие реализации слишком далеки от основного направления GNU-сознания; Мне нравится сообщество GNU, поэтому Guile был лучшим выбором для меня. Также у Guile есть лучший набор библиотек, включенных в установку по умолчанию, которую я нашел (учитывая, что отличные от других респондентов я ничего не знаю о Clojure).

Я видел, как некоторые другие респонденты повторяли старое заклинание "Если вы хотите что-то сделать, используйте Common Lisp, если вы хотите узнать, используйте Scheme". Вероятно, это было в эпоху SICP, но в наши дни я не думаю, что это правда. Хорошая реализация Схемы, как и Guile, имеет множество доступных библиотек и имеет множество хороших примеров использования, которые показывают, что вы можете получить много всего, что с ним сделано.

Ответ 5

Мое впечатление: общий Lisp больше для получения материала, схема больше для образования и развлечений. Я предпочитаю реализацию SBCL. Схема, я не знаю.

Ответ 6

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

Я использую GNU clisp, но я рассматриваю возможность перехода на SBCL из-за его сосредоточенности на эффективности.

Ответ 8

Обычно я рассматриваю его так: Common Lisp относится к схеме, поскольку С++ относится к Python. Как с Common Lisp, так и с С++ вы получаете огромную нагрузку от инструментов и мощностей и, по сути, допускаете блуждание. С Scheme, с другой стороны, больше внимания уделяется простоте, и вам дают немного меньше веревки, чтобы повесить себя.

И так же, как и с С++ vs. Python, существует такая идея, что один для реальных проектов взрослого, в то время как другой - своего рода игрушечный язык, где можно поиграть или создать рассылочные сценарии, хотя в большинстве случаев "игрушка", достаточно хорош для того, что вам нужно.

Если вы хотите посмотреть Схему, я рекомендую PLT Racket. Это не строго стандартная схема, но это по сути то же самое и это "батарейки включены".

Ответ 9

common lisp намного полезнее, но схема намного чище. в основном сводится к этому.

Ответ 10

Схема имеет равную или большую мощность Common Lisp, но у нее не так много поддержки или привязок. Я бы пошел с Common Lisp. Что касается реализации? Я уже давно использую sbcl в slime/swank, и это довольно хорошо и быстро. Слизь действительно приятная.

Ответ 11

Меня не волнует сложность синтаксиса, просто сила, гибкость и другие аспекты самого языка.

Синтаксис одинаково сложный или нет в любом lisp. Синтаксис Clojure немного проще для не-lispers, потому что используются разные скобки. Это имеет большее значение, чем можно было бы ожидать.

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

Я бы рекомендовал Clojure или Common Lisp неофиту, основанному на личном опыте.

Clojure более функциональный и чрезвычайно практичный. Если вы используете CL, я рекомендую IDE (у Allegro и других есть бесплатные версии) или с помощью текстового редактора и repl. Другими словами, не используйте слизь. Для Clojure я не могу думать о каких-либо IDE, но, возможно, Textmate или Eclipse будут иметь что-то?

В схеме есть очень хорошие IDE, такие как DrScheme. Но мне было легче оставаться в стороне, когда делали какой-то реальный проект, и оба Clojure и CL, похоже, делали это легче.