allora... ci provo...
la funzione dropuntill si può scrivere cosi:

#let rec dropuntill p l = match l with
[] -> [] |
[x] when (p x) -> [x] |
[x] when not(p x) -> [] |
x::xs -> if p x then x::xs
else dropuntill p xs;;


penso dovrebbe funzionare.. forse c'è qualche errore di sintassi ma adesso nn ho caml light per provarlo... cmq l'idea è quella!!