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

Как вы относитесь к Clojure?

Что вы думаете о Clojure? Я подумываю изучить его дальше, в настоящее время использую Erlang и в целом доволен им, кроме фиаско записей... Является ли Clojure столь же мощным, как LISP?

4b9b3361

Ответ 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.:)