Frage

Mein Professor sagte uns, dass wir eine Programmiersprache für die nächste Programmieraufgabe wählen könnten. Ich habe Sinn, eine funktionale Sprache auszuprobieren, so dachte ich, ich würde clojure ausprobieren. Das Problem ist, dass ich die Syntax und verstehen die grundlegenden Konzepte zu verstehen, aber ich habe Probleme immer alles zu „Klick“ in meinem Kopf. Hat jemand einen Rat? Oder bin ich vielleicht die falsche Sprache Kommissionierung beginnt funktionale Programmierung mit?

War es hilfreich?

Lösung

Es ist ein wenig wie Fahrrad fahren, es dauert nur Praxis. Versuchen Lösung einiger Probleme mit ihm, vielleicht Project Euler und schließlich wird es klicken.

Jemand erwähnte das Buch „The Little Schemer“ und das ist ein ziemlich gutes Buch. Obwohl es Schema zielt auf die tatsächlichen Probleme arbeiten durch wert sein.

Viel Glück!

Andere Tipps

Nun, für mich, stieß ich auf das gleiche Problem wie Sie am Anfang, wenn ich tun Ocaml gestartet, aber der Trick ist, dass Sie über zu denken beginnen müssen, was Sie aus dem Code wollen und < em> nicht , wie es zu tun !!!

Um zum Beispiel den Platz der Liste der Elemente zu berechnen, vergessen Sie die Länge der Liste und solche Tricks, nur denken mathematisch wie folgt aus:

  • Wenn die Liste leer ist -> ich bin fertig

  • Wenn nicht, dann wird die Liste mit einem Kopf und Schwanz haben muss. -> Sie den Platz des Kopfes zu berechnen, dann fragen Sie Ihre Funktion das gleiche mit dem Schwanz zu tun

Man denke nur an den allgemeinen Fall und der Basis ein, und dass Sie Daten emittieren und Modifizieren es nicht (es sei denn Sie es ändern wollen;)).

Viel Glück!

Sie können Besuche The Little Schemer .

Wie wäre es damit: http://www.defmacro.org/ramblings/lisp.html

Es ist eine sehr einfache, Schritt-für-Schritt-Einführung in Lisp aus der Sicht eines regelmäßigen zwingend notwendig, Programmierer (Java, C #, etc.) Zu denken.

Für pädagogische Zwecke würde ich PLT Scheme empfehlen. Es ist eine portable und leistungsstarke Umgebung mit sehr guten Beispiele und eine noch bessere Dokumentation. Es wird Ihnen helfen, die Gedanken hinter der funktionalen Programmierung Schritt für Schritt und in einem sehr sauberen Art und Weise zu entdecken. eine kleine Anwendung, die Wahl Ihr zu implementieren wird helfen, die neue Sprache zu lernen.

http://www.plt-scheme.org/

Zusätzlich "Struktur und Interpretation von Computerprogrammen" von H. Abelssn, G. Sussman und J. Sussman ist ein sehr gutes Buch über Scheme (und Programmierung).

Viele Grüße

mue

Hier finden Sie aktuelle 99 Lispy Probleme

Einige Gedanken über Lisps, nicht spezifisch für Clojure (Ich bin kein Experte Lisp, so dass ich hoffe, sie sind meist richtig und sinnvoll):

Codierung im AST

Ich weiß wenig über Compiler oder Interpreter Theorie, aber jedes Mal, wenn ich Code in Lisp, erstaunt es mich, dass es fühlt sich an wie ein AST direkt zu bauen.

Das ist, von dem, was „code = Daten“ bedeutet in Lisp-Codierung ist eine Menge, wie Daten Füllstrukturen (verschachtelte Listen) mit AST-Knoten. Erstaunlich, und es ist leicht zu lesen (mit dem richtigen Texteditor).

A Programmierbare Programmiersprache

So Code Brocken sind nur Listen verschachtelt und Listenoperationen sind Teil der Sprache. So können Sie ganz einfach Lisp-Code schreiben können, die Lisp-Code erzeugt (siehe Lisp-Makros). Dies macht Lisp eine programmierbare (in sich selbst!) Programmiersprache.

Das macht einen DSL oder ein Dolmetscher in Lisp ist sehr einfach (siehe auch Meta-Kreis Auswertung ).

niemals etwas neu starten

Und in den meisten Lisp-Systemen Code (einschließlich Dokumentation) introspected werden kann und heiß zur Laufzeit ausgetauscht werden.

Erweiterte OOP

Dann die meisten Lisp-Systeme eine Art von Object System haben von CLOS abgeleitet, die ein fortschrittliches ist (im Vergleich zu vielen OOP-Implementierungen) und konfigurierbare Object System (siehe die Kunst des Metaobjektprotokoll ).

diese Funktionen All, wo vor langer Zeit erfunden, aber ich bin nicht sicher, dass sie in vielen anderen Programmiersprachen verfügbar sind (obwohl die meisten aufholen, zB mit Verschlüssen), so dass Sie sich „neu entdecken“ und auf diese gewöhnen durch Üben (die Bücher in anderen Antworten sehen).

Denken Sie daran: es ist, alle Daten

!

Schreiben Sie ein paar einfache klassische Funktionen, die Lisp zu gut ist, wie

  • umkehren eine Liste

  • sagen, wenn ein Atom irgendwo in einem s-Ausdruck

  • schreiben EQUAL zu sagen, wenn 2 s-Ausdrücke gleich sind

  • Schreibfransen die Liste der Atome am Rande eines s-Ausdruck

  • bekommen
  • Schreib SUBST, dann schreiben SUBLIS

  • Symbolische Differenzierung

  • Algebraische Vereinfachung

  • schreiben Sie eine einfache EVAL und / oder Übernehmen

Verstehen Sie, dass Lisp für diese Art von nicht-Nebeneffekt funktionale Programme gut ist.

Es ist auch nützlich für Stateful Nebenwirkung (nichtfunktionalen) Programme, aber die sind eher wie „Programme“ als „Funktionen“.

Was ist besser für eine bestimmte Anwendung geeignet ist, hängt von der Anwendung. Im Allgemeinen soll es enthält nicht weniger und nicht mehr, Zustandsinformationen als nötig.

Easy!

  

M-x lisp-mode

OK, OK, so haben Sie vielleicht nicht Emacs für ein Gehirn. In alle Ernst, ist das, was Sie tun müssen, um wirklich an Rekursion gut zu bekommen. Dies kann durchaus ein Gehirn Kette zunächst bei dem Versuch, den Begriff der Rekursion über die kanonischen Beispiele zu verlängern, aber letztlich wird es in mehr Flüssigkeit, lispy Code zur Folge hat.

Außerdem erhält eine Menge Leute auf der Klammer aufgehängt, und ich weiß wirklich nicht, warum - die Syntax sehr einfach und konsistent ist und kann in wenigen Minuten zu bewältigen. Für mich kam ich nach Schema nach C gelernt ++ und Java, und ich habe immer gedacht, dass der Unterschied zwischen „Funktionen“ und „Operatoren“ war eine falsche Dichotomie, und es war erfrischend, diese Unterscheidung zu sehen eliminiert.

Was die funktionale Programmierung geht, so lange wie Sie Ihren Kopf um die Tatsache, dass eine Funktion ist ein First-Class-Wert wickeln können und kann sowohl in und aus anderen Funktionen übergeben werden Sie in Ordnung sein sollten. Der Nutzen dieser wird im Laufe der Zeit klar geworden, aber es ist genug, dass Sie Funktion Mitnahmen und funktions Rückkehr Funktionen schreiben kann.

Schließlich bin ich nicht sicher, was unterstützen Clojure für Makros hat, aber sie sind ein wesentlicher Bestandteil von Lisp betrachtet. Allerdings würde ich nicht darum zu lernen, sie kümmern, bis Sie tief vertraut mit den oben genannten Elemente sind -. Obwohl Makros unglaublich nützlich sind und vielseitig, sie sind auch weniger häufig verwendet als die anderen Techniken, die ich erwähnt

würde ich mit einer Sprache starten, die interpretiert werden können. Ich fand Moskau ML ziemlich einfach zu sein. Es ist eine leichte Implementierung von Standard ML.

Meine persönliche Praxis ist ein kleines Projekt (etwas, das 3-5 Nächte hacken nehmen könnte) zu finden und umzusetzen. Wie wärs mit einem Blog-Filter-Tool? Vielleicht nur ein Turm von Hanoi oder verlinkte Liste Implementierung (die sind in der Regel 1-Nacht-Projekte).

So wie es funktioniert in der Regel heraus ich es schlecht zum ersten Mal implementieren, wegwerfen, was ich hatte, und es klickt endlich ein paar Stunden in.

Eine große Hilfe nimmt einen Kurs in so etwas wie ... äh ... LISP! :) Die Hausaufgaben wird Sie zwingen, viele der Konzepte zu konfrontieren und es klickte für mich, lange bevor das Semester zu Ende.

Viel Glück !!

Viel Glück. Es dauerte bis etwa auf halbem Weg durch den „Programmiersprachen“ Kurs in der Schule vor Scheme „geklickt“. Sobald dies geschehen ist, aber alles nur Sinn gemacht, und ich verliebte mich in der funktionalen Programmierung.

Schreiben Sie ein Lisp-Interpreter in Lisp.

Wenn Sie nicht alrady haben, lesen Sie weiter, was macht Lisp eine eindeutige Sprache. Wenn Sie dies nicht erst tun, werden Sie die gleichen Dinge zu tun, versuchen Sie in einigen anderen Programmiersprachen tun könnte.

Dann versuchen Sie einige kleine Sache zu implementieren (versuchen Sie es für Sie nützlich zu machen, oder Sie vielleicht nicht die Motivation haben).

Lisp in einem Kasten ist eine gute Möglichkeit, Ihre Füße nass werden.

Für mich das Wichtigste ist, dass Sie alles tun, in einer ‚Lisp-y‘ Art und Weise zu machen. zu denken, werden Sie nicht in Versuchung ‚In Java ich eine for-Schleife hier verwenden würde, wie soll ich tun für Schleifen in Lisp?‘ aber gehen durch genügend Beispiele und Tutorials (wie jemand darauf hingewiesen, SICP ist perfekt für diese), dass Sie beginnen zu erkennen, wenn der Code ‚Lisp-y‘ aussieht und gemeinsame Sprache Paradigmen erkennen.

Ich weiß sicherlich das Gefühl, irgend Code suche ich gerade geschrieben habe und weiß intuitiv, dass es für diese Sprache und Plattform / Rahmen richtig idiomatischen ist -., Dass, glaube ich, ist, wenn es ‚klickt‘

Bearbeiten : Und ein dickes Lob für eine funktionale Sprache wählen, weniger Studenten es gerade getan in Java hätte:)

Wer hat gesagt, es klicken wird? Ich bin immer verwirrt

Aber wenn Sie darüber nachdenken, wie viel Abstraktion ist es möglich, sich zu verstecken, hinter Lisp-Makros. Dann wird Ihr Gehirn explodiert.

:)

Ich würde Programming Clojure überprüfen. Es ist ein großes Buch für Nicht-lispers.

Zusätzlich zu dem, was andere SO'ers haben bereits vorgeschlagen, hier sind meine 2 Cent:

  1. Starten Sie die Sprache lernen und versuchen, in der Sprache
  2. ein paar einfachen numerischen / Hobby Probleme aus
  3. Wichtig: Schreiben Sie die Lösung / Code zu Stackoverflow, für Menschen, die Meinung zu fragen, ob das wirklich die LISPy ist Weg , es zu tun.

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top