[nem-pl] polimorficzna rekursja

ToMasz Wierzbicki tomasz at ii.uni.wroc.pl
Fri Jan 30 20:39:26 CET 2004


Michal Moskal wrote:
> 
> Czy ja dobrze kombinuję, że to jest przykład polimorficznej rekursji?
> I czy istnieją jakieś sensowne przykłady?
> 
> module M {
>   'a meth (v : int, x : 'a) : 'a {
>     if (v < 0) x
>     else {
>       def (x, _) = meth (v - 1, (x, x));
>       x
>     }
>   }
> 
>   Main () : void {
>     printf ("%d\n", meth (5, 1));
>   }
> }

To NIE jest przykład polimorficznej rekursji. Ta funkcja czasem zwraca
int, czasem int * int itd, więc nie może mieć typu.

Polimorfizm bierze się z ignorowania danych. Wyniku nie można zignorować.

Nie możesz dać jej typu int * 'a -> 'a, bo Ci system typów padnie, jak
spróbujesz napisać M.meth(0,1) == 1

ToMasz Wierzbicki                          http://tomasz.ii.uni.wroc.pl/




More information about the devel-pl mailing list