Есть ли большие синтаксические различия между Clojure и Lisp? - PullRequest
14 голосов
/ 14 января 2011

Я хочу выучить новый язык, и я подумал начать с Lisp.Я хочу знать, если я изучаю Lisp, знаю ли я также Clojure (с минимальными усилиями), существуют ли большие синтаксические различия между Lisp и Clojure?

Ответы [ 5 ]

11 голосов
/ 14 января 2011

Синтаксических различий нет (в основном потому, что языки семейства Lisp имеют почти нет синтаксиса), но, безусловно, есть различия в других областях. Clojure обладает множеством современных функций программирования, особенно подходящих для высокой масштабируемости (актеры, ссылки и т. Д.), Которых нет в «классическом» Лиспе (например, Common Lisp).

Clojure - активный, хорошо поддерживаемый диалект Lisp. Если вы хотите выучить Лисп, вы не ошибетесь с Clojure.

Вы можете найти больше информации в ответах на Какой Лисп я должен изучить? .

6 голосов
/ 22 января 2011

90% того, что вы изучите, изучая свой первый Лисп, перенесется на ваш следующий.

3 голосов
/ 18 января 2011

Думаю, будет справедливо сказать, что если вы изучите принципы LISP, вы также узнаете принципы Clojure и наоборот. Все они основаны на одной философии, подчеркивая такие вещи, как:

  • Код - это данные. Макросы - это обычные функции, которые манипулируют кодом.

  • Использование S-выражений для представления данных и кода.

  • Понятие списка / последовательности как фундаментальной структуры.

  • Функциональное программирование с первоклассными функциями.

Помимо этого, существует множество различий в синтаксисе, библиотеках, средах выполнения и т. Д. Разница, на мой взгляд, примерно такая же, как в C # по сравнению с C ++ - если вы хорошо знаете один из них, основные понятия будут знакомы но есть еще много фундаментальных отличий.

См. Этот список того, чем Clojure отличается от других Лиспов

2 голосов
/ 14 января 2011

Я предполагаю, что под Лиспом вы подразумеваете Common Lisp, поскольку сам Lisp - это больше семейство языков (включая Clojure), чем отдельный конкретный язык.Есть некоторые синтаксические изменения в том, что Clojure был задуман как более современный Лисп.Например, вы можете создавать векторы с помощью [] s, карты с {} s, которые не являются частью Common Lisp.И, конечно же, взаимодействие с Java неизбежно становится важной частью Clojure.

1 голос
/ 24 января 2011

Clojure использует векторы как лямбда-параметры (значения аргументов), но вы можете написать макрос defun и lambda , который будет выглядеть в Common Lisp следующим образом.Clojure также имеет доступ к методам и файлам Java Object с использованием комы и имени, которое выглядит как обычный вызов функции

(. ToString 10) - вызовет метод для метода toString с номером 10, но .toString не является функцией.если вы попытаетесь проверить значение .toString, то будет исключено, что .toString не является определенным символом.

А также в кавычках (в основном в макросах) вместо комы Clojure используйте tylda.

...