Wie Schreibe rekursive lambda-Ausdruck in Haskell?

Ich bin nicht sicher, ob dies guter Programmierstil ist, aber ich würde gerne wissen, ob man definieren kann, eine rekursive Funktion mit dem lambda-Ausdruck.

Dies ist ein künstliches Beispiel, das ich aus: So kann man es definiert die Fakultät-Funktion in Haskell rekursiv wie folgt

factorial :: Integer -> Integer 
factorial 1 = 1
factorial (n + 1) = (n + 1) * factorial n

Nun möchte ich eine Funktion f so dass f n = (factorial n) + 1. Anstatt einen Namen für factorial n (D. H. Definition der vor der hand), möchte ich definieren f wo factorial n ist, da ein lambda-Ausdruck in der definition von f. Kann ich eine rekursive lambda-definition in f im Ort mit dem Namen Fakt?

  • Y-combinator
  • Warum nicht einfach einen Namen geben? Es muss nicht eine Globale Namen, es gibt let und where.
  • Beachten Sie übrigens, dass n+k mustern, wie Sie verwendet in Ihrer definition von factorial wurden entfernt sich von der Sprache wie von Haskell 2010. Es ist ratsam, nicht mehr verwenden.
  • p.s. Ich bevorzuge den base case 0: factorial 0 = 1 die es Ihr ermöglichen, zu arbeiten, für eine größere Anzahl
  • Ich denke, Sie wird nicht, wie mein code da fast alles importiert Data.Function (fix)
  • Der Y-combinator ist nicht gut-geschrieben in Haskell.

InformationsquelleAutor user898033 | 2011-08-21
Schreibe einen Kommentar