@pc_doctor: Beide Lösungen sind offensichtlich falsch. Und es ist sicher nicht zielführend ohne Kenntnisse wie Listen in Python funktionieren, nämlich deutlich anders als in Haskell, zu versuchen Haskell in Python-Syntax zu schreiben. Listen werden in Python zum Beispiel *nicht* als rekursiver Datentyp definiert wie in Haskell, weswegen eine rekursive Lösung hier unsinnig und sehr ineffizient ist. Man kann sich von Python-Listen nicht effizient den „tail” von einer Liste geben lassen. Dazu muss man sich eine *Kopie* der Liste ohne das erste Element geben lassen. Das läuft auf eine quadratische Laufzeit hinaus, für eine eigentlich lineare Operation.
Wenn Du für eine rekursive Lösung auf die leere Liste prüfen willst, dann muss da weder mit 0 noch mit NIL (was es in Python nicht gibt) verglichen werden, sondern mit der leeren Liste. Das würde man an der Stelle in Haskell doch auch machen‽
Und beim rekursiven Aufruf muss man die Liste ohne das erste Element übergeben. Sonst bleibt die Liste doch bei jedem Aufruf gleich lang und man kommt nie beim Rekursionsanker, der leeren Liste an.
Bei der iterativen Lösung braucht man die Liste auf gar nichts prüfen. Aber man braucht eine Schleife die über die Elemente iteriert, denn sonst ist es keine iterative Lösung. Deine kommt ja nur mit Listen klar die genau vier Elemente enthalten.
Die praxisrelevante Lösung für diese Aufgabe wäre einfach die vorhandene, eingebaute `sum()`-Funktion zu verwenden:
Code: Alles auswählen
In [17]: values = [1, 2, 3, 4]
In [18]: sum(values)
Out[18]: 10
Bevor Du versuchst Haskell auf Python zu übertragen, solltest Du am besten erst einmal die Grundlagen von Python lernen, damit Du ein Verständnis vom Ziel einer solchen Portierung hast. In der Python-Dokumentation ist ein Tutorial, und absoluten Programmieranfängern wird oft
Learn Python The Hard Way empfohlen. Falls Du bisher nur Haskell kennst, dürftest Du in dem Sinne noch als absoluter Anfänger gelten, denn rein funktionale Programmiersprachen funkionieren *deutlich* anders als imperativ, objektorientierte Programmiersprachen. Auch wenn Python das funktionale Paradigma bis zu einem gewissen Grad unterstützt.
Wenn es `sum()` zum Beispiel nicht gäbe, könnte man sich das im funktionalen Stil aus `reduce()` und `operator.add()` zusammen basteln:
Code: Alles auswählen
In [20]: import operator
In [21]: reduce(operator.add, values, 0)
Out[21]: 10
`reduce()` ist also so ähnlich wie `foldl` aus Haskell.