[nem-pl] polimorficzna rekursja
Michal Moskal
malekith at pld-linux.org
Fri Jan 30 20:47:45 CET 2004
On Fri, Jan 30, 2004 at 08:39:26PM +0100, ToMasz Wierzbicki wrote:
> 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.
Nie, zwraca zawsze 'a.
> 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
Nie bardzo rozumiem.
--
: Michal Moskal :: http://www.kernel.pl/~malekith :: GCS !tv h e>+++ b++
: When in doubt, use brute force. -- Ken Thompson :: UL++++$ C++ E--- a?
More information about the devel-pl
mailing list