Me estoy acostumbrando a las funciones de orden superior de Haskell. Usualmente puedo reemplazar patrones explícitos de recursión con funciones como mapa, pliegue y escaneo. Sin embargo, a menudo me encuentro con el siguiente patrón de recursividad, que no entiendo cómo expresar el uso de funciones de orden superior:Patrón de recursión común
f (x:[]) = k x
f (x:xs) = g x (f xs)
Por ejemplo, supongamos que estoy representando cuadros analítica. Luego de crear un tipo de datos tales como:
data Tableau = N Expr | S Expr (Tableau) | B Expr (Tableau) (Tableau)
Si quiero convertir una lista de Expr
s en una estructura de cuadro, quiero una parte la función de los cuales se podría parecer:
f (x:[]) = N x
f (x:xs) = S x (f xs)
Ahora, Veo tres opciones: (1) crear una función que decide, dado un cuadro y una lista, si la siguiente rama en el cuadro debe ser S
o N
(o B
, pero ignoraremos ese caso); (2) use una función de orden superior para encapsular el patrón de recursión de f
; (3) use una función como f
.
¿Cuál sería la mejor opción?
Usted se refiere a un término L, pero no lo veo definido en ninguna parte? ¿Es esto un error tipográfico o una omisión? – Gian
Sí, definitivamente fue un error tipográfico. Quise decir N. Gracias por captar eso. – danportin