Funktionale Sprachen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Dienstag 21. August 2007, 17:29

Und wenn man mal meint, man weiß genug zum Thema Programmieren, einfach mal ne funktionale Sprache, am besten Haskell lernen.

Edit: Vom ursprünglichen Thread abgetrennt.
Zuletzt geändert von birkenfeld am Mittwoch 22. August 2007, 19:37, insgesamt 1-mal geändert.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
BlackJack

Mittwoch 22. August 2007, 09:15

Anschauen ja, staunen ja, aber *lernen*!? Solange es "lineare" Programme ohne Benutzerinteraktion und Fehlerbehandlung sind, ist Haskell ja okay, aber wie man so etwas wie russisches Roulette mit Zufallszahlen und Ausgaben und Eingaben machen soll, ist mir echt zu hoch. Jedenfalls wenn man nicht das ganze Programm in die IO-Monade "verschieben" will und letztendlich doch wieder imperativ programmiert. Da sind mir hybride Sprachen wie Scheme oder OCaml doch lieber. Ich hab's mal in OCaml versucht:

http://paste.pocoo.org/show/2793/
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 22. August 2007, 13:10

BlackJack hat geschrieben:Anschauen ja, staunen ja, aber *lernen*!? Solange es "lineare" Programme ohne Benutzerinteraktion und Fehlerbehandlung sind, ist Haskell ja okay, aber wie man so etwas wie russisches Roulette mit Zufallszahlen und Ausgaben und Eingaben machen soll, ist mir echt zu hoch. Jedenfalls wenn man nicht das ganze Programm in die IO-Monade "verschieben" will und letztendlich doch wieder imperativ programmiert.
Ganz meine Meinung. Ich fand Haskell von der Idee ziemlich interessant. Ich wollte deshalb versuchsweise mal eins meiner Mini-Python-Scripts in Haskell konvertieren. Bei der Datenausgabe wurde es dann aber mit den Monaden ziemlich wüst, so dass von der Eleganz Haskells nichts mehr zu erkennen war. Ganz zu schweigen von der Zeit, die ich im Gegensatz zu meinem ersten Python-Script brauchte, um es zum Laufen zu bringen. Ich bin zwar nur Amateur und kein Informatik-Profi, aber Freude am Programmieren bringt mir Haskell nicht.
@Blackjack: Meinst Du wirklich mit OCaml oder Scheme geht's besser? Welche von beiden würdest Du dann am ehesten empfehlen?
MfG
HWK
BlackJack

Mittwoch 22. August 2007, 13:57

Ich denke mit OCaml oder Scheme geht's besser als mit Haskell. Letztlich sind beides auch imperative Sprachen, so wie Python auch eine Menge funktionales bietet. Die beiden "funktionalen" Sprachen nähern sich der Mischung eben eher von der funktionalen Seite und Python eher von der Imperativen.

Im OCaml-Buch steht unter Funktional vs. Imperativ auch sinngemäss, das beides seine Berechtigung hat und es Probleme gibt die sich einfacher Funktional ausdrücken lassen und solche die Imperativ besser beschrieben werden können.

Eben an der Stelle wo die Eleganz bei Haskell aufhört, wenn man doch mal irgendwo eine Sequenz von Anweisungen mit Seiteneffekten braucht, oder Objekte mit einem veränderbaren Zustand, kann man das in OCaml und Scheme einfach machen.

Beim russischen Roulette in OCaml hätte ich den "Revolver" zum Beispiel auch als veränderbaren "record" oder gar als Objekt modellieren können. Dann hätte ich mir einiges an hin und herreichen des Revolvers ersparen können. Aber in dem Punkt wollte ich funktional bleiben. :-)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 22. August 2007, 14:44

Klingt vielversprechend. Wo siehst Du den Unterschied zwischen Scheme und OCaml? Welche der beiden sollte ich mir denn am ehesten einmal anschauen? Mit Haskell hatte ich mich wie gesagt bereits etwas beschäftigt. Es scheint, als ob Du OCaml bevorzugen würdest.
MfG
HWK
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 22. August 2007, 15:13

Scheme ist eben ein recht pythonisches Lisp, es hat eine sehr simple Syntax die zugleich auch als Datenstruktur dient - d.h. mit Scheme kann man Programme schreiben, die sich selbst modifizieren (indem sie die Datenstruktur ändern). Zudem in einigen Aspekten Python ähnlich, das Scoping funktioniert so ziemlich identisch. Die Syntax ist für funktionale Programmierung gar nicht mal so übel, aber imperative Programmierung macht eher weniger Spaß. Es ist einer der simpelsten Lisp Dialekte, seine Spezifikation ist etwa so lang wie der Appendix der Spezifikation zu Common Lisp. Zu Scheme gibt es auch mehrere recht akademische Bücher, im bekanntesten wird am Schluss sogar ein Scheme-Interpreter in Scheme programmiert. Scheme hat recht viele Implementationen die sich sehr unterscheiden. Fürs Lernen ist PLT-Scheme empfohlen, da es einen Editor hat, DrScheme, der extra zum lernen für Studenten gedacht ist. Daneben gibt es noch Bigloo, welches ganz verschiedenen Bytecode generieren kann, unter anderem auch für.NET.

OCaml hingegen hat eine Implementation, die sehr schnell ist und einige wenige Bücher. Die Syntax ist eher "normal", wenn man andere Imperative Sprachen gewohnt ist,ich muss aber zugeben, dass sie mir nicht gefällt - da finde ich Scheme etwas besser. OCaml ist auch im akademischen Umfeld beheimatet, Real-World-Programme gibt es auch eher wenige. Im Gegensatz zu vielen anderen funktionalen Sprachen kann man in OCaml auch Objekte nutzen (in CL gibts dafür CLOS und in Scheme bastet sich jeder sowas selbst). Es gibt noch einen Dialekt, F#, der auf .NET abzielt.

Ich habe mit keiner der beiden Sprachen sonderlich viel Erfahrung - das Problem ist auch, dass man damit nicht so leicht zu irgendwelchen brauchbaren Ergebnissen kommt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 22. August 2007, 15:24

Leonidas hat geschrieben:das Problem ist auch, dass man damit nicht so leicht zu irgendwelchen brauchbaren Ergebnissen kommt.
Den Eindruck habe ich auch. Aber interessante Ansätze enthält z.B. Haskell doch, z.B. die besondere "Faulheit", die es ermöglicht, "unendlich lange Listen" zu definieren. OCaml scheint ja gewisse Elemente mit Haskell gemeinsam zu haben. Außerdem schreibst Du ja auch:
Leonidas hat geschrieben:Die Syntax ist eher "normal", wenn man andere Imperative Sprachen gewohnt ist
Deshalb werde ich mir wohl OCaml einmal etwas näher anschauen.
Danke Euch beiden
HWK
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 22. August 2007, 15:46

HWK hat geschrieben:Den Eindruck habe ich auch. Aber interessante Ansätze enthält z.B. Haskell doch, z.B. die besondere "Faulheit", die es ermöglicht, "unendlich lange Listen" zu definieren.
Naja, sowas ähnliches geht in Python mit den Generatoren ja auch:

Code: Alles auswählen

def infinite(element):
    while True:
        yield element

infinite_generator = infinite(None)
Nur sollte man darauf dann nicht ``list()`` ausführen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Mittwoch 22. August 2007, 15:46

Ich werde mir in der nächsten Zeit wahrscheinlich Struktur und Interpretation von Computerprogrammen besorgen. Darin wird Scheme verwendet, d.h. ich könnte, wenn Interesse besteht, meinen Eindruck von der Sprache posten, etc. Wird aber 'n bisschen dauern, da ~700 Seiten. ;)
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 22. August 2007, 15:51

Craven hat geschrieben:Ich werde mir in der nächsten Zeit wahrscheinlich Struktur und Interpretation von Computerprogrammen besorgen. Darin wird Scheme verwendet, d.h. ich könnte, wenn Interesse besteht, meinen Eindruck von der Sprache posten, etc. Wird aber 'n bisschen dauern, da ~700 Seiten. ;)
Das ist eben das Buch von dem ich sprach, das Wizard-Book, in dem am Schluss eine Scheme Implementation geschrieben wird. Ist aber nicht als Buch vor dem Schlafengehen geeignet. ;) Mich würde dann deine Meinung zum Buch interessieren.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Mittwoch 22. August 2007, 15:58

Ich weiss nicht ob ich OCamls Syntax als "normal" ansehen würde. Die ist schon recht funktional und der von Haskell gar nicht so unähnlich. So etwas wie Pattern-Matching findet man in imperativen Sprachen zum Beispiel selten.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 22. August 2007, 17:02

Craven hat geschrieben:Ich werde mir in der nächsten Zeit wahrscheinlich Struktur und Interpretation von Computerprogrammen besorgen. Darin wird Scheme verwendet, d.h. ich könnte, wenn Interesse besteht, meinen Eindruck von der Sprache posten, etc. Wird aber 'n bisschen dauern, da ~700 Seiten. ;)
Das Buch schaut interessant aus. Das werde ich mir eventuell auch einmal antun.
MfG
HWK
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 22. August 2007, 19:34

So, hier ist die Haskell-Version vom Russischen Roulette.

Sie ist dem OCaml-Pendant nicht unähnlich, sprich, wo es imperativ ist, ist es Haskell auch, und das problemlos:

http://paste.pocoo.org/show/2828/

(Und die Einrückung ist bedeutsam, aber das nur am Rande :))

Wenn ich mal Lust habe, schreibe ich noch eine Version mit State-Monade, also ohne Revolver-Herumreichen ;)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Mittwoch 22. August 2007, 19:59

Mein Problem mit funktionalen Sprachen ist vor allem das ich nicht weiss wann ich sie verwenden sollte. Scheme habe ich mal etwas im zusammenhang mit Gimp gebraucht. Aber das war es dann auch schon mit praktischer anwendung. Naja auch als vim Benutzer werde ich mir wohl mal die Zeit gönnen und Lisp lernen. Und sei es nur aus reiner Freude am lernen.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 22. August 2007, 20:20

Genau das ist es, was mich zu Haskell gebracht hat: Freude am Lernen. Und der Gedanke: wenn ich mir schon eine neue Programmiersprache anschaue und evtl. sogar aneigne, dann sollte es eine ganz radikal andere sein, die in ihrem Gebiet ebenso herausragend ist wie Python auf seinem.

Und dem Mathematiker in mir geht bei dieser Sprache einfach das Herz auf :D

Natürlich werde ich jetzt Python deswegen nicht über Bord werfen. Aber ich werde weiter dabeibleiben mich über den erweiterten Horizont freuen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten