Существуют ли большие различия в синтаксисе между Clojure и Lisp

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

Ответы

Ответ 1

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

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

Вы можете найти дополнительную информацию в ответах на Какую Lisp мне следует узнать?.

Ответ 2

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

Ответ 3

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

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

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

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

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

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

Смотрите список способов, которыми Clojure отличается от других Lisps

Ответ 4

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

Ответ 5

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

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

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