Krautkanal.com

Veröffentlicht am 2015-03-12 20:11:50 in /prog/

/prog/ 6770: Lisp

chanpory Avatar
chanpory:#6770

Aus gegebenen Anlass fragt dieser Bernd, ob es sich Lohnt oder es Spaß macht, LISP zu lernen?
Ich habe hier seit schon knapp 2 Jahren ein CommonLisp-Buch buch.jpg stehen, aber ich wurde nie wirklich warm damit. Vielleicht lag es auch daran, dass das Buch ziemlich dScheiße war. Mir gefiel die Syntax ziemlich, da dieser Bernd wohl einen unterdrückten Klammer- oder Fesselfetisch besitzt.

Kann mir ein Bernd hier etwas empfehlen? Danki :3

adhiardana Avatar
adhiardana:#6772

Wenn du noch keine funktionale Programmiersprache kannst, tu es!

Und bitte? Welches Buch? Gibt es überhaupt eine Wahl?
http://mitpress.mit.edu/sicp/ Lies es! Für Lesefaule, wie dich: Aufzeichnung der Vorlesung per Google verfügbar.

kinday Avatar
kinday:#6779

What's the best IDE for LISP programming?

silv3rgvn Avatar
silv3rgvn:#6780

>>6779

*for windows

emmakardaras Avatar
emmakardaras:#6787

>>6779
>>6780
Depends on the Lisp.
For your average, dynamically typed Lisp you can't archive much more than different coloured braces and keyword highlighting, so an editor will suffice.

fluidbrush Avatar
fluidbrush:#6789

>>6779

SLIME for EMACS.

nicoleglynn Avatar
nicoleglynn:#6790

>>6770
Hallo Berndi.

Also es gibt ja 2 große Kategorien von heute noch aktiv weiterentwickelten Lisp Dialekten:
• Common Lisp
• Scheme

Ich habe mit Scheme sehr gute Erfahrungen gemacht.
Auch von Scheme gibt es mehrere Implementierungen zu nennen:
• Racket
• Stalin (brutally optimizes)
• Chicken
• guile

Von denen ist mir guile am liebsten, weil es sehr gut mit meinem GNU+Linux integriert
und viele Libraries existeren um recht schnell praxisrelevantes und produktives Zeug zu codieren.
Bei Common Lisp weniger so umfangreich und vital, hab ich das gefühl (hab mir Common lisp aber auch nur kurz angeschaut)
Hier zum Beispiel ein kleiner HTTP Client in 3 Zeilen:

(let ((s (socket PF_INET SOCK_STREAM 0)))
(connect s AF_INET (inet-pton AF_INET "127.0.0.1") 80)
(display "GET / HTTP/1.0\r\n\r\n" s)

Außerdem finde ich die Mitgelieferte Doku sehr gut.
Also mit:
apt-get install guile-2.0 guile-2.0-doc
info guile
Bekommst du recht angenehme Doku in gnu info. (bzw yelp guile , falls du gnu info nicht magst)
Das Gute daran ist, das es nicht eine lange manpage ist sondern hierarchisch strukturiert mit sections und links.
Und es gibt einen dedizierten Scheme teil und dann noch einen extra teil über guile spezifische Extensions.
Und wie man zu C Code Interfaced.
+ Eine volle Dokumentation aller Standardmodule.
Also diese Doku wäre meine "Buch" empfehlung.

andrewgurylev Avatar
andrewgurylev:#6793

>>6790
Danke Bernd! Ich habe ernsthaft nicht erwartet, hier Antworten zu finden. Danke dir :3

Ich werde mir demnächst mal etwas über Scheme im Allgemeinen und auch zu GNU Guile, was dir ja sehr zusagt, durchlesen. Hab dich lieb, Bernd :3

chatyrko Avatar
chatyrko:#6799

>>6790

Sekundiert!

Dieser Bernd kann außerdem Clojure sehr empfehlen, vor allem falls OP aus der Java-Ecke kommt. Bei Clojure hat man nämlich den Vorteil das man auf die ganzen Java Bibiliotheken zugreifen kann. Clojurescript hat sich Bernd noch nicht angeguckt, aber ist vermutlich auch ganz nett.

albertaugustin Avatar
albertaugustin:#6800

>>6770
Warum sollte Haskell-Übermensch sich LISP ansehen?

chatyrko Avatar
chatyrko:#6802

>>6800
S-Expressions? Dynamische Typisierung?

rangafangs Avatar
rangafangs:#6803

>>6802

Ganz Ehrlich: Haskell Syntax ist genial und S-Expressions überlegen. Auch Makros gehen.

Dynamische Typisierung ist ganz nett, aber hat definiv deutliche Nachteile.

Die Typeninferferenz von Haskell ist genial. Das Typsystem von Haskell ist an sich auch nicht schwer zu verstehen.

Doof an Haskell sind die ganzen Dinge die man können muss. Aber wenn du sie einmal kannst ist es ja egal.

Zunächst muss man Language direktiven Aktivieren, nur um ohne Schmerzen auf die Elemente eines Records zugreifen zu können und nämlich triviales Zeug zu machen. Dann muss man Millionen Bibliotheken verstehen, Wie lenses und Arrows, Axiome von Typklassen auswendig lernen, mit mMn. Absolut beschissener Doku. Haskaller glauben dass die Typdefinition und die eigentliche Definition als Doku ausreicht. Ich weiß immer noch nicht was ein "lift" ist. Ich habe keine Zusammehänge zwischen scheinbar verschiedenen Verwendungen dieses Wortes gefunden. Haskell in etwa so selbst dokumentierend wie APL. Vielleicht wenn man es verstanden hat, aber es ist extrem Anfängerfeindlich.

herrhaase Avatar
herrhaase:#6805

>>6803

Zusammenfassend: Haskell mit der Doku lernen ist ziemlich genau so wie Mathe lernen indem man sich das Skript einer Erstsemestervorlesung durchließt. Für mich sehr schmerzhaft. Für andere Leute vielleicht "nur ein paar Definitionen".

vickyshits Avatar
vickyshits:#6823

>>6803
Haskell ist eigentlich nicht so schwer zu verstehen wenn man lambda calculus, rewriting systems usw. in einer logikvorlesung gelernt hat.

t. Logik-Meister

posterjob Avatar
posterjob:#6824

>>6823

Da unterscheidet sich Haskell von Lisp nicht.

aiiaiiaii Avatar
aiiaiiaii:#6851

>>6824
hm? ich kann das nicht beurteilen, aber hat Bernd nicht gerade impliziert LISP sei einfacher erlernbar als Haskell?

davidsasda Avatar
davidsasda:#6853

>>6851

In der Aufzeichnung der SICP-Vorlesung bringt der Abelson einem so in einer gefühlten Viertelstunde quasi die komplette Programmiersprache bei. Lisp ist extrem simpel, dafür elegant und einfach wunderschön. <3

jajodia_saket Avatar
jajodia_saket:#6860

>>6853
Bis zu dem Zeitpunkt, wo man den Code warten muss.

leandrovaranda Avatar
leandrovaranda:#6863

>>6853
>Lisp ist extrem simpel, dafür elegant und einfach wunderschön.
Wieso wird es dann nicht verwendet?

craigelimeliah Avatar
craigelimeliah:#6864

>>6863
Das Argument ist wohl lächerlich. Es gibt viele schöne Sprachen, die einfach nicht sonderlich populär sind. OCaml, zum Beispiel.
Java wurde ja auch nicht so verbreitet, da es so toll war, sondern weil Sun damals richtig viel Geld in die Werbung gesteckt hat und jeder zu Beginn des WWWs kühle Applikationen auf seiner Heimseite wollte.

kurafire Avatar
kurafire:#6865

>>6864
OCaml ist populär, es wird dafür genutzt, wo funktionale Sprachen nicht allzu viel Schmerzen verursachen.

Z.B. zum Implementieren von Compilern:

- Haxe Compiler
- der alte Rust-Compiler, bevor es selbstgehorstet war
- OPA Compiler
- Facebooks Hack Typechecker
- uvm. (z.B. https://ocaml.org/learn/companies.html)

Man sieht das nur nicht so in freier Wildbahn.

cmzhang Avatar
cmzhang:#6866

>>6865
Nett zu wissen.
Würdest du, oder ein anderer Bernd, mir denn zum Lernen von OCaml raten? Ich schaute mir soeben diese Sprache mal grob an und musste sagen, dass mir das Konzept irgendwie gefiel. Auch die Möglichkeiten, die einem sich dann mit Mirage OS noch öffnen. Klingt äußerst verlockend.

smaczny Avatar
smaczny:#6867

>>6866
Haskellbernd von oben hier:

OCaml habe ich an der Uni gelernt. Es ist eine schöne funktionale Sprache. Es ist nicht so "sauber" wie Haskell, dafür am Anfang leichter zu erlernen. Der Compiler erzeugt auch ganz guten Maschinencode.
In OCaml ist es aber auch viel einfacher Code mit Sideeffects zu schreiben als Haskell. Ich bin dann zu Haskell gewechselt, da ich eben diese klare Trennung von funktionalem, side effect freien code und dem rest mag.

OCaml ist aber sicher eine schöne Sprache, und besonders da Microsoft F# hat, das praktisch OCaml für .NET ist, interessant.

areus Avatar
areus:#6868

>>6866

Ich schätze mal, Real World OCaml soll ganz gut sein.
https://ocaml.org/learn/books.html

Gibt es auch für die JVM http://www.ocamljava.org/.

uxdiogenes Avatar
uxdiogenes:#6869

>>6867
Das Problem ist, dass Haskell nach wie vor nicht pragmatisch ist. Ähnlich wie bei C++ muss man Zillionen idiotische Idiome verwenden, wenn man damit was gebacken kriegen will.

Plus, der Compiler ist immer noch ein Witz, u.a. deshalb, weil aufgrund der Lazy Evaluation noch recht viel Arbeitsspeicher gebraucht wird.
Z.B. hier: https://github.com/koalaman/shellcheck
Einfach lächerlich, wenn man bedenkt, dass Haskell eine Fehlerklasse verschwinden lässt, aber damit eine neue einführt.

Im Gegensatz zu Lisp, wo es vielleicht ein-zwei gute Compiler gibt, aber zu welchem Dialekt dann? Und dann gibt es keine Idiome, sondern jeder kann machen was er will und niemand kann es am Ende warten. Kein Wunder, dass Reddit und Paul Grahams Yahoogeshizzle am Ende einfach neu geschrieben worden sind, zweiteres sogar in Perl, und das ist schon ne schlechte Ansage.

OCaml ist halt der pragmatische Mittelweg.

n1ght_coder Avatar
n1ght_coder:#7045

>>6772
vergiss sicp, viel zu schwer und hoch theoretisch. Das kannst du nebenbei bisschen anlesen und später ernsthafter angehen. Aber auf jeden sehr wohl zu empfehlen, nur nicht zu früh.

>>6770
Empfehle Common Lisp zu lernen mit diesem Buch http://www.gigamonkeys.com/book/ was nicht nur sehr schnell Lisp beibringt aber eine multiparadigmen Sprache ist die sehr viele seltene/einzigartige Aspekte hat: Makros, Condition System und CLOS (ein mächtiges, mächtiger als Java's, oop system). Sowie interaktive Programmierung was sehr viel spaß macht!

Es gibt stets einen Ausblick etwas sehr spaßiges und mächtiges zu lernen:
Wenn Makros genügend geübt werden öffnen Sie die Tür zu DSL (Domain specific language) die ein mächtiges programmier "paradigma" darstellen um komplexität zu beherrschen (...) unteranderem das zentralle Thema von SICP (meta-linguistic abstraction).

Interaktive Programmierung durch die Hilfe von type inferrence ermöglich das schnelle schreiben von prototypen und wenn es funktioniert können die variablen typen durch deklaration festgenageln werden und somit code erzeugen das genauso schnell und effizient ist wie C code.

Und vieles, vieles mehr!

Neuste Fäden in diesem Brett: