Je m'habitue aux fonctions d'ordre supérieur de Haskell. Habituellement, je peux remplacer les modèles explicites de récursivité par des fonctions telles que map, fold et scan. Cependant, je lance souvent dans le modèle de récurrence suivante que je ne comprends pas comment exprimer en utilisant des fonctions d'ordre supérieur:Modèle de récurrence commun
f (x:[]) = k x
f (x:xs) = g x (f xs)
Par exemple, supposons que je représente analytique des tableaux. Puis-je créer un type de données telles que:
data Tableau = N Expr | S Expr (Tableau) | B Expr (Tableau) (Tableau)
Si je veux convertir une liste de Expr
s dans une structure de tableau, je veux une partie de fonction qui pourrait ressembler à:
f (x:[]) = N x
f (x:xs) = S x (f xs)
Maintenant, Je vois trois options: (1) créer une fonction qui décide, donné un tableau et une liste, si la prochaine branche dans le tableau devrait être S
ou N
(ou B
, mais nous ignorerons ce cas); (2) utiliser une fonction d'ordre supérieur pour encapsuler le modèle de récurrence de f
; (3) utiliser une fonction comme f
.
Quelle serait la meilleure option?
Vous faites référence à un terme L, mais je ne le vois pas défini nulle part? Est-ce une faute de frappe ou une omission? – Gian
Oui, c'était définitivement une faute de frappe. Je voulais dire N. Merci d'avoir attrapé ça. – danportin