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?
I
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?
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 +)".
Ich verwende Clojure und nicht CL, weil:
:wq
@NikolaKolev Ich hatte ein Problem, so dass ich beschlossen, Clojure zu verwenden. Jetzt habe ich ein (Problem)
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.
Ich glaube, er hatte einfach Lust, etwas zu tippen, denn sein Kommentar war ziemlich überflüssig.
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.