DOMANDA Funzione ricorsiva CAML Light

SaltyNenno

Nuovo Utente
58
7
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à.
 

over_coder

Nuovo Utente
20
4
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.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!