Что вы думаете о Clojure? Я подумываю изучить его дальше, в настоящее время использую Erlang и в целом доволен им, кроме фиаско записей... Является ли Clojure столь же мощным, как LISP?
Как вы относитесь к Clojure?
Ответ 1
Подумайте об этом. Если не по какой-либо другой причине, потому что вы действительно можете использовать его в реальном проекте.
You : Can I use this small Java library called Clojure?
Boss: Why do you need it?
You : For some concurrency improvements.
Boss: Ok.
Ответ 2
То, о чем вы ссылаетесь на Lisp -1 vs Lisp -2, - вопрос о том, имеют ли функции и переменные одно и то же пространство имен. В Lisp -1 Lisps, например Scheme и Clojure, они это делают. В Lisp -2 Lisps, как Common Lisp, они этого не делают. Это в основном вопрос вкуса и/или удобства - это не влияет на мощность языка программирования.
В качестве примера, в Clojure вы можете сделать это:
(defn my-apply [func arg1 arg2]
(func arg1 arg2))
Это функция, которая принимает функцию и два значения и применяет функцию к значениям. Например:
user=> (my-apply + 1 2)
3
В Common Lisp вам нужно записать это как
(defun my-apply (func arg1 arg2)
(funcall func arg1 arg2))
Причина, по которой вам нужен "funcall", заключается в том, что, поскольку "func" находится в пространстве имен переменных, вы не можете напрямую использовать его как функцию, как вы можете в Clojure, что не делает этого различия. Поэтому вы должны сказать Common Lisp ", пожалуйста, интерпретируйте эту переменную как функцию и вызовите ее с помощью этих аргументов". Другим следствием этого является то, что для получения того же результата вы должны называть "my-apply" следующим образом:
=> (my-apply #'+ 1 2)
3
Здесь проблема обратная: "+" - это функция, но вы хотите передать ее как переменную, поэтому вам нужно "преобразовать" ее. "#" + "сокращен для" (function +) ", btw.
Ответ 3
Я использую Clojure, а не CL, потому что:
- Он хорошо взаимодействует с Java, поэтому я могу передавать на внешний компьютер свое кодирование
- Он имеет доступ к zillions java-библиотек, которые делают всевозможные вещи, включая Swing и Weka
- Поскольку он работает на JVM, вы можете с уверенностью предположить, что ваша проблема будет работать повсюду.
- Если вы можете показывать те же библиотеки, которые используются с гораздо меньшим количеством кода, вы можете конвертировать Java-программистов в лямбда-интерфейс.
- И, самое главное, я не привязываюсь к Emacs
: WQ
Ответ 4
Clojure является диалектом LISP, поэтому да, он такой же мощный, как LISP.
По какой-либо другой причине, чем теперь у нас есть хороший инструмент LISP для JVM, мне нравится этот язык.
Ответ 5
Я думаю, что имя умное.
Ответ 6
"Clojure имеет потенциал для concurrency -ориентированного программирования, что Java сделал для объектно-ориентированного программирования десять лет назад: упростить работу с использованием языка (или, в случае Clojure s," языковая среда "), которая похожа на то, к чему уже привыкли программисты". - Билл Клеменсон
И люди, LISP, состоят из семейства языков программирования. Есть диалоги LISP, такие как Common LISP и Clojure. И кроме того, существует множество реализаций Common LISP или Scheme.
Ответ 7
Я использовал Erlang на работе для скоординированного тестирования сетевой нагрузки, и это было идеально для этого, потому что проблема была в пределах "приятного пятна" Erlang "правильного программного обеспечения, ориентированного на распределенное общение". Я нахожу Clojure БОЛЬШЕ лучше для кода, который должен сделать что-то сложное в одном поле с несколькими потоками (это более распространенный сценарий).
Вы опережаете кривую, потому что знаете Эрланг, и это поможет вам определить проблемы, в которых он действительно сияет. Что вы делаете Clojures настоящим "сладким пятном"?
Ответ 8
Clojure - это Lisp -1, да. Подумайте об этом как о хорошем Общем Lisp без всякого исторического багажа. Он также имеет несколько современных concurrency функций, таких как STM и Agents (они решили не применять модель Erlang Actors). Преимущество работы на JVM прост: для него написано SO много библиотек (в основном на Java).
Clojure в Clojure - это постоянная попытка переписать компилятор Clojure в Clojure, чтобы сделать его более переносной и обслуживаемой. Помимо core.clj, большая часть Clojure написана на Java в настоящее время. После этого перемещения можно будет переносить его на много виртуальных машин, включая Parrot.
Ответ 9
что я имею в виду под "Clojure, столь же мощным, как LISP", что я читаю где-то здесь в stackoverflow, что Common Lisp is lisp -2 и Clojure is lisp -1? (Я мог бы легко быть бессвязным здесь)...
насколько это касается concurrency, мне очень нравится история Erlang, так как вы так легко распространяете приложения, написав их в модели Actor
от создателя Clojure в http://groups.google.com/group/clojure/browse_thread/thread/2a2b24ffef5d1631?pli=1
"Даже с актерами Clojure пока не будет распределенного concurrency рассказ, но я рассматриваю возможность просто использовать Erlang оптом, используя Jinterface для Clojure ↔ Clojure или даже Clojure ↔ Erlang процессы. Возможно, это будет выглядеть Termite, когда это будет сделано. Оставаться настроенная. "
Ответ 10
Мне нравится Common Lisp лучше, чем Clojure, потому что синтаксис более регулярный и не привязан к ужасным (IMHO) Java-API.
Для Common Lisp у меня также есть выбор между несколькими превосходными и хорошо протестированными реализациями и зрелым стандартом, на который можно положиться.
Но если мне пришлось использовать Java для задания, я бы определенно рассмотрел возможность использования Clojure.:)