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
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 22. August 2007, 20:22

birkenfeld hat geschrieben: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 ;)
Das sieht gut aus. Ich hätte aber irgendwie ein anderes Verhalten erwartet. Hier einmal ein Probelauf:

Code: Alles auswählen

Main> main
---------
Spieler
Trommel drehen?
j
Trommel dreht sich
*klick*
---------
Computer
*klick*
---------
Spieler
Trommel drehen?
n
***Peng***     -- Ich wollte ja gar nicht schießen
==========
Spieler ist tot.

Main> main
---------
Spieler
Trommel drehen?
j
Trommel dreht sich
*klick*
---------
Computer
*klick*
---------
Spieler
Trommel drehen?
j
Trommel dreht sich
*klick*
---------
Computer
*klick*
---------
Spieler
Trommel drehen?
n
*klick*  -- Ich habe ja wieder nicht geschossen
---------
Computer
*klick*
---------
Spieler
Trommel drehen?
n
*klick*
---------
Computer
Trommel dreht sich
***Peng***
==========
Computer ist tot.
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, 20:23

Trommel drehen != Abdrücken. Abgedrückt wird nach jedem Zug, du kannst halt vorher die Trommel verdrehen (-> die volle Patrone wird wieder zufallsverteilt) oder nicht (-> die Trommel dreht sich um eins weiter).
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

Mittwoch 22. August 2007, 20:24

Alles klar.
Danke
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, 20:33

So, hier ist noch die Version mit State-Monade: http://paste.pocoo.org/show/2830

In dem Fall ist das aber kaum übersichtlicher, lohnt sich also nicht.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
BlackJack

Mittwoch 22. August 2007, 20:40

@birkenfeld: Die Ähnlichkeit ist wirklich nicht zu übersehen. Mir hätte so aus dem Kopf `return` gefehlt und der Datentyp für `Player`. Das sieht aus wie `record`\s in OCaml, wusste gar nicht, dass es so etwas in Haskell gibt. In "Haskell - The Craft of Functional Programming" kommt das glaube ich nicht vor.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Mittwoch 22. August 2007, 21:29

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

Mittwoch 22. August 2007, 21:44

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

Mittwoch 22. August 2007, 23:42

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

Donnerstag 23. August 2007, 08:06

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

Donnerstag 23. August 2007, 12:26

*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

Donnerstag 23. August 2007, 13:13

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

Donnerstag 23. August 2007, 14:19

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 23. August 2007, 16:03

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 Modvoice
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 23. August 2007, 16:14

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 Modvoice
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Donnerstag 23. August 2007, 19:37

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...
Antworten