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
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Der Sortieralgorithmus Selectionsort is bei Wikipedia in vielen verschiedenen Sprachen umgesetzt, u.a. auch in Haskell und Python. Man vergleiche die Länge. :wink:
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Der Fairness halber muss man einräumen, dass das Python-Beispiel selten dämlich war. Ich habe das jetzt mal korrigiert.

Man kann die rekursive Implementierung auch in Python umsetzen, ist aber hässlich, weil remove() None zurückgibt:

Code: Alles auswählen

def ssort(seq):
    if not seq: return seq
    m = min(seq)
    ns = seq[:]
    ns.remove(m)
    return [m] + ssort(c)
Zuletzt geändert von birkenfeld am Donnerstag 23. August 2007, 08:06, insgesamt 1-mal geändert.
Dann lieber noch Vim 7 als Windows 7.

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

birkenfeld hat geschrieben:Der Fairness halber muss man einräumen, dass das Python-Beispiel selten dämlich war. Ich habe das jetzt mal korrigiert.

Man kann die rekursive Implementierung auch in Python umsetzen, ist aber hässlich, weil remove() None zurückgibt:

Code: Alles auswählen

def ssort(seq):
    if not seq: return seq
    m = min(seq)
    ns = seq[:]
    ns.remove(m)
    return m + ssort(c)
Bei mir liefert das einige Fehlermeldungen. Eine lauffähige Variante wäre z.B.:

Code: Alles auswählen

def ssort(seq):
    if not seq:
        return seq
    m = min(seq)
    seq.remove(m)
    return [m] + ssort(seq)
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

Stimmt, das habe ich übersehen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
mq
User
Beiträge: 124
Registriert: Samstag 1. Januar 2005, 19:14

*kratz* ich will mir ja seit laengerem mal Lisp ansehen, im Moment schwanke ich da zwischen Common Lisp und Scheme. Hat irgendjemand Erfahrungen damit, bzw kann mir eins von beiden empfehlen?
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beim guten alten Terrashop bin ich heute über Einführung in die Programmierung mit Haskell gestolpert und hab's mir direkt mal gegönnt. Der Verlag macht ganz ordentliche Bücher und für'n Fünfer kann ich's immer noch wegwerfen, wenn's schlecht ist ;)
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Terrashop is wirklich gut, da hab ich auch schon mein C-Buch her. ;)
Allerdings is Struktur und Interpretation von Computerprogrammen da auch nicht billiger als bei amazon. :?
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lumax hat geschrieben:*kratz* ich will mir ja seit laengerem mal Lisp ansehen, im Moment schwanke ich da zwischen Common Lisp und Scheme. Hat irgendjemand Erfahrungen damit, bzw kann mir eins von beiden empfehlen?
Scheme ist minimalistisch, also versucht so klein wie nötig zu sein - spiegelt sich dann aber auch in der Dokumentation wieder. Für scheme gibt es Etwa drei erstzunehmende Bücher: Das Wizard-Book (SICP), The Scheme Programming Language und die etwas absonderliche Schemer-Serie (The Little Schemer, The Seasoned Schemer und The Reasoned Schemer).

Für Common Lisp hast du da etwas mehr Auswahl, neben dem Standardwerk Common Lisp, the Language (CLtL, auch als Aluminium-Book bekannt) welches zum CLtL1-Standard führte (aktueller ist ANSI-CL) hast du noch Practical Common Lisp, welches eben zeigt, dass man Lisp auch für praktische Aufgaben verwenden kann (wurde übrigens auch positiv von den Lesern von LtU aufgenommen, nicht so wie das Practical O'Caml-Buch).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Y0Gi hat geschrieben:Beim guten alten Terrashop bin ich heute über Einführung in die Programmierung mit Haskell gestolpert und hab's mir direkt mal gegönnt. Der Verlag macht ganz ordentliche Bücher und für'n Fünfer kann ich's immer noch wegwerfen, wenn's schlecht ist ;)
Dito. Ansehen kann man es mal. Für teure Bücher gibts ja immer noch Universitätsbibliotheken, die haben die in der Regel sowieso in mehreren Exemplaren rumliegen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Also ich hab vor 3-4 Jahren mit PLT-Scheme angefangen zu Programmieren. Wieso weiß ich auch nicht genau, wohl weil es nicht tausend befehle gibt, für Anfänger gedacht ist und so...
Naja, ich bin -komplett ohne Vorkenntnisse- bis zu einem Sudokulöser mit recht netter, bunter graphischer Oberfläche gekommen. So ganz hab ichs dann aber net mehr verstanden und deswegen (weil ich dinge vermisst hab, die ich nicht gefunden/verstanden habe), bin ich dann auf die Suche gegangen, die mich zu Python führte.
Scheme ist nett und mal was anderes, jetzt würd ich wohl auch mehr verstehn, aber man kommt schnell an Grenzen, sei es das es nix gibt, oder nirgends steht, das es es das gibt...
Zum Einstieg wars, denke ich, die falsche Sprache, denn nur mit der englischen standard-Doku wars tw echt mühevoll.

edit: Ich hätt ja gern auch noch ein Codebeispiel gebracht, aber was ich gefunden habe, war entweder kurz und sinnlos oder zu lang.
:arrow: Das Sudokuprogramm mit allem drum und drann hat 1500 Zeilen Code. Wobei da viel c&p Zeug dabei ist...
BlackJack

Dann solltest Du es mal überarbeiten. Entweder "traditionell" in Funktionen auslagern, oder mit Makros arbeiten. Die sind ja schliesslich eine der Spezialitäten von Scheme und Lisp.

Ich denke mal das komplizierteste bei Scheme sind "continuations", ansonsten ist das eine sehr einfache Sprache.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

schlangenbeschwörer hat geschrieben:edit: Ich hätt ja gern auch noch ein Codebeispiel gebracht, aber was ich gefunden habe, war entweder kurz und sinnlos oder zu lang.
:arrow: Das Sudokuprogramm mit allem drum und drann hat 1500 Zeilen Code. Wobei da viel c&p Zeug dabei ist...
http://markbyers.com/moinmoin/moin.cgi/ ... dokuSolver *g*
Mit google findet man aber auch noch andere Sudoku Solver in Funktionalen Sprachen welche richtig elegant wirken.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Wie gesagt, es war in sehr frühen Zeiten und ich hab nicht mehr verstanden. Zudem war ca. die hälfte Graphik. Und kein GUI, sondern alles selbstgebautes, buntes, tw. rundes Zeug.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Leonidas hat geschrieben: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.
Ich hab mir das Buch jetzt auch zugelegt und bis Kapitel 3 durchgelesen, wenn auch nicht durchgearbeitet. Kapitel 4 habe ich mir dann nur noch zum Teil angetan, Kapitel 5 nur noch quergelesen. Wer auch mal drin schmökern will, auf Englisch hier: http://mitpress.mit.edu/sicp/full-text/book/book.html. Ich halte die deutsche Übersetzung sowieso für ziemlich schlecht. Insbesondere der Versuch, auch die Bezeichner in den Programmen zu übersetzen, der nicht immer konsequent umgesetzt wurde, hat zu vielen Fehlern in den Programmtexten geführt.
Ansonsten ist das Buch interessant. Es zeigt doch neue Aspekte des Programmierens, z.T. auch mit sehr interessanten Beispielanwendungen (z.B. symbolische Differentialrechnung, elektrische Schaltkreise etc.). Ob hierzu Scheme aber die ideale Sprache ist? An die polnische Notation gewöhnt man sich ja noch recht schnell, aber diese ganzen Klammern. Da verliert man schnell den Überblick, was wohin gehört. Deshalb habe ich mir den Schluss auch nicht mehr angetan. Ich glaube, man hätte das meiste auch gut mit Python darstellen können.
OCaml halte ich bei dem, was ich bisher von diesen Sprachen weiß, für einfacher und mit verschiedenen hilfreichen Features: Pattern-Matching, OOP, die übersichtlichere Syntax und für den, der es braucht, Typsicherheit und den wohl effektiveren Compiler.
Die Frage ist aber
veers hat geschrieben: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.
Am ehesten könnte ich mir dafür noch irgendwelche mathematischen Anwendungen vorstellen. Dafür wäre es dann aber wohl sinnvoller, eine komplett funktionale Sprache wie Haskell zu verwenden, um side-effects sicher auszuschließen oder um es mit birkenfelds Worten zu sagen:
birkenfeld hat geschrieben: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.
Langer Rede kurzer Sinn: Ich werde wohl weiter bei Python bleiben. Es gibt glaube ich kaum Möglichkeiten, schneller lauffähige Programme zu bekommen. Wenn man sich mal mit funktionaler Programmierung austoben will, reicht dazu wohl Python ebenfalls aus. Und wenn's dann wirklich einmal schneller laufen muss: C.
MfG
HWK
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

HWK hat geschrieben:OCaml halte ich bei dem, was ich bisher von diesen Sprachen weiß, für einfacher und mit verschiedenen hilfreichen Features: Pattern-Matching, OOP, die übersichtlichere Syntax und für den, der es braucht, Typsicherheit und den wohl effektiveren Compiler.
Den effektiveren Compiler hat es wohl, aber Scheme ist gar nicht schlecht dabei. Zum Lernen ist der Compiler aber ziemlich schnuppe und der Interpreter von Mz ist brauchbar. OOP kannst du natürlich nachrüsten, aber hey, wenn du schon Scheme lernst und dort dann OOP nutzt, dann ist das seltsam ;) Die Syntax ist durch die Klammern aber sehr regulär und simpel (Übersichtlich weniger).

Na immerhin hat die deutsche Übersetzung ein schöneres Cover und ist billiger *duck* ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

So, ich hab das Haskellbuch von Terrashop jetzt mal durchgelesen.

Eine "Einführung in die Programmierung" ist es durchaus, aber von Haskell sieht man wirklich nur die Basics. Alles, was einigermaßen mächtig (und damit ein wenig komplizierter) wird, ist weggelassen oder nur sehr spärlich angesprochen, und damit schaut die Sprache recht langweilig aus. Außerdem sind einige Fehler drin, die ich dem Übersetzer anlaste. Dafür ist ein nettes Kapitel über Komplexität drin, und am Schluss hat es sogar noch ein komplexeres Progrämmchen.

Dem erfahrereneren Programmierer, der sich auch nicht scheut, selber mal nachzudenken, lege ich aber eher "Write Yourself a Scheme in 48 hours" (siehe Google) nahe.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

[OT]zu russischem Roulette muss ich mal Wikipedia zitieren:
"Bedingt durch deren Funktionsweise kann Russisches Roulette ausschließlich mit Revolvern praktiziert werden. Einschüssige Pistolen oder Selbstladewaffen mit Munitionszuführung über ein Magazin führen zum unweigerlichen Ableben des ersten Spielers."[/OT]
8)
TUFKAB – the user formerly known as blackbird
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

blackbird hat geschrieben:[OT]zu russischem Roulette muss ich mal Wikipedia zitieren:
"Bedingt durch deren Funktionsweise kann Russisches Roulette ausschließlich mit Revolvern praktiziert werden. Einschüssige Pistolen oder Selbstladewaffen mit Munitionszuführung über ein Magazin führen zum unweigerlichen Ableben des ersten Spielers."[/OT]
8)
Naja, man kann mit einem Schrotgewehr immerhin noch "Schrotgewehrdrehen" spielen ;)

Aber der Informationsgehalt von Wikipedia ist manchmal wirklich atemberaubend.

Ich warte noch auf den Hinweis im Artikel über Sixpacks, dass in ein Sixpack konstruktionsbedingt nicht mehr als 6 Dosen passen...
uwe_holst
User
Beiträge: 12
Registriert: Samstag 26. Februar 2005, 06:25

veers hat geschrieben: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.
Warum Vim mit Lisp, wenn Vim mit Python doch viel schöner ist?

Uwe
Antworten