DOMANDA Funzione ricorsiva CAML Light

Pubblicità

SaltyNenno

Nuovo Utente
Messaggi
58
Reazioni
7
Punteggio
27
Salve a tutti, ho da poco iniziato a studiare CAML Light e ancora abituato al C mi sono trovato in difficoltà. Devo scrivere una funzione ricorsiva che resistuisce il valore di una lista data che si trova in posizione n. Io l'ho pensata così:

Codice:
#let rec ennesimo (n,l)=
     let contatore= 1
     in
     match (n,l) with
     (n1,[])-> []
     |(n1,x::xs) when x>0-> if x=contatore then x
                            else ennesimo(n1,xs)

Tuttavia arrivato a questo punto non saprei come aumentare il contatore per le successiva chiamata della funzione ennesimo dove appunto l'elemento analizzato sarà in posizione 2 e non più in posizione 1. Chiedo scusa in anticipo ma sono davvero alle prime armi con questo linguaggio.

Grazie in anticipi a chiunque aiuterà.
 
Io sono ancora agli inizi con la programmazione funzionale ma il più grosso suggerimento che ti potrei dare è, come suggerisce il paradigma, di ridursi a un problema sempre più piccolo. Ora stai pensando a come lo risolveresti in C ma la soluzione ideale è di dimenticarti del contatore e lavorare "al rovescio".

Cerco di stare un po' sul generico per permetterti di pensare a una soluzione autonomamente. Altrimenti è possibile anche usando un contatore ma in quel caso c'è da mettere in piedi una soluzione ben meno elegante e macchinosa.

Ultima nota: il match ti servirà solamente sulla lista l e nella forma composta dal primo elemento (head) e il resto della lista (tail) per poter applicare la ricorsione.
 
Pubblicità
Pubblicità
Indietro
Top