[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