51 Stimmen

Was ist Ihre Meinung zu Clojure?

Was haltet ihr von Clojure? Ich denke darüber nach, es als nächstes zu lernen. Derzeit benutze ich Erlang und bin im Allgemeinen zufrieden damit, mit Ausnahme des Fiaskos mit den Datensätzen... Ist Clojure so leistungsfähig wie LISP?

133voto

Marko Punkte 29192

Erwägen Sie, es zu lernen. Wenn auch aus keinem anderen Grund, dann weil Sie es in einem echten Projekt verwenden können.

You : Can I use this small Java library called Clojure?
Boss: Why do you need it?
You : For some concurrency improvements.
Boss: Ok.

24 Stimmen

I

26voto

Mark Probst Punkte 6509

Was Sie mit Lisp-1 vs. Lisp-2 meinen, ist die Frage, ob Funktionen und Variablen denselben Namensraum teilen. In Lisp-1-Lisps, wie Scheme und Clojure, tun sie das. In Lisp-2-Lisps, wie Common Lisp, tun sie das nicht. Dies ist hauptsächlich eine Frage des Geschmacks und/oder der Bequemlichkeit - es hat keinen Einfluss auf die Leistungsfähigkeit der Programmiersprache.

In Clojure können Sie dies zum Beispiel tun:

(defn my-apply [func arg1 arg2]
  (func arg1 arg2))

Dies ist eine Funktion, die eine Funktion und zwei Werte annimmt und die Funktion auf die Werte anwendet. Zum Beispiel:

user=> (my-apply + 1 2)
3

In Common Lisp müssten Sie dies wie folgt schreiben

(defun my-apply (func arg1 arg2)
  (funcall func arg1 arg2))

Der Grund, warum Sie "funcall" brauchen, ist, dass Sie "func" nicht direkt als Funktion verwenden können, wie in Clojure, das diese Unterscheidung nicht macht, da es im Namensraum von Variablen liegt. Man muss also Common Lisp sagen "bitte interpretiere diese Variable als Funktion und rufe sie mit diesen Argumenten auf". Eine weitere Folge davon ist, dass man "my-apply" so aufrufen muss, um das gleiche Ergebnis zu erhalten:

=> (my-apply #'+ 1 2)
3

Hier ist das Problem umgekehrt: "+" ist eine Funktion, aber Sie wollen sie als Variable übergeben, also müssen Sie sie "umwandeln". "#'+" ist übrigens die Abkürzung für "(Funktion +)".

3 Stimmen

T

5 Stimmen

C

22voto

konr Punkte 1153

Ich verwende Clojure und nicht CL, weil:

  • Es kommuniziert gut mit Java, so dass ich meine Kodierung auslagern kann.
  • Es hat Zugriff auf die zahllosen Java-Bibliotheken, die alle möglichen Dinge tun, einschließlich Swing und Weka
  • Da es auf der JVM läuft, können Sie mit größerer Sicherheit davon ausgehen, dass Ihr Problem überall funktionieren wird
  • Wenn Sie zeigen können, dass dieselben Bibliotheken mit viel weniger Code verwendet werden, können Sie Java-Programmierer zur Lambda-Methode bekehren
  • Und, was am wichtigsten ist, ich bin nicht an Emacs gebunden.

:wq

4 Stimmen

H

0 Stimmen

@NikolaKolev Ich hatte ein Problem, so dass ich beschlossen, Clojure zu verwenden. Jetzt habe ich ein (Problem)

1 Stimmen

@Tom oder vielleicht (habe ich Problem)

16voto

Allain Lalonde Punkte 88365

Clojure ist ein Dialekt von LISP, und ja, es ist genauso leistungsfähig wie LISP.

Allein schon aus dem Grund, dass wir jetzt ein gutes LISP-Tool für die JVM haben, mag ich diese Sprache.

3 Stimmen

Nicht alle Lisp-Dialekte sind gleich leistungsfähig. Es sei denn, Sie meinen mit "A ist mindestens so mächtig wie B", dass B in A implementierbar ist. In diesem Fall sind alle Turing-kompletten Programmiersprachen gleich mächtig, und die Frage wird unsinnig.

3 Stimmen

Der alte, gut trainierte Taubenschwarm argumentiert.

0 Stimmen

Ich glaube, er hatte einfach Lust, etwas zu tippen, denn sein Kommentar war ziemlich überflüssig.

14voto

Bill Echo Punkte 308

Ich denke, der Name ist clever.

1 Stimmen

Dennoch ist es schwierig, sie auszusprechen.

0 Stimmen

Auf jeden Fall besser als "Erjang" für die Ohren

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X