Существуют ли большие различия в синтаксисе между 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.