Mi sto abituando alle funzioni di ordine superiore di Haskell. Di solito posso sostituire schemi espliciti di ricorsione con funzioni come map, fold e scan. Tuttavia, ho spesso incontrato il seguente schema di ricorsione, che non capisco come esprimere utilizzando le funzioni di ordine superiore:Pattern di ricorsione comune
f (x:[]) = k x
f (x:xs) = g x (f xs)
Per esempio, supponiamo che io rappresento analitica tableaux. Poi creo un tipo di dati come ad esempio:
data Tableau = N Expr | S Expr (Tableau) | B Expr (Tableau) (Tableau)
Se voglio convertire un elenco di Expr
s in una struttura tableau, voglio una parte cui funzione potrebbe somigliare:
f (x:[]) = N x
f (x:xs) = S x (f xs)
Ora, Vedo tre opzioni: (1) creare una funzione che decida, dato un tableau e una lista, se il prossimo ramo nel tableau dovrebbe essere un S
o N
(o B
, ma ignoreremo tale caso); (2) utilizzare una funzione di ordine superiore per incapsulare il pattern di ricorsione di f
; (3) utilizzare una funzione come f
.
Quale sarebbe l'opzione migliore?
Ti riferisci ad un termine L, ma non lo vedo definito da nessuna parte? È un errore o un errore? – Gian
Sì, era sicuramente un errore di battitura. Intendevo N. Grazie per averlo capito. – danportin