Ich gewöhne mich an die höheren Funktionen von Haskell. Normalerweise kann ich explizite Rekursionsmuster durch Funktionen wie Map, Fold und Scan ersetzen. Allerdings laufe ich oft in die folgende Rekursion Muster, das ich nicht verstehen, wie Funktionen höherer Ordnung mit auszudrücken:Gemeinsames Rekursionsmuster
f (x:[]) = k x
f (x:xs) = g x (f xs)
Zum Beispiel nehme ich an analytischen Tableaus bin darstellt. Dann habe ich einen Datentyp erstellen, wie:
data Tableau = N Expr | S Expr (Tableau) | B Expr (Tableau) (Tableau)
Wenn ich eine Liste von Expr
s in einem Tableau Struktur umwandeln will, ich will ein Funktionsteil davon ähneln könnten:
f (x:[]) = N x
f (x:xs) = S x (f xs)
Jetzt, Ich sehe drei Optionen: (1) Erstellen Sie eine Funktion, die bei einem Tableau und einer Liste entscheidet, ob der nächste Zweig im Tableau ein S
oder N
(oder B
sein soll, aber wir ignorieren diesen Fall); (2) Verwenden einer Funktion höherer Ordnung zum Einkapseln des Rekursionsmusters von f
; (3) Verwenden Sie eine Funktion wie f
.
Was wäre die beste Option?
Sie beziehen sich auf einen L-Begriff, aber ich sehe es nirgendwo definiert? Ist das ein Tippfehler oder eine Auslassung? – Gian
Ja, es war definitiv ein Tippfehler. Ich meinte N. Danke, dass du das verstanden hast. – danportin