[nem-pl] in_tail_position
Michal Moskal
malekith at pld-linux.org
Thu Mar 11 01:47:14 CET 2004
On Thu, Mar 11, 2004 at 01:02:55AM +0100, Lukasz Kaiser wrote:
> Hej.
>
> Michal, moglbys mi napisac co dokladnie oznacza in_tail_position
> i w jaki sposob jest nadawane ? Ogladam sobie tyexpr.n ale niestety
> nie widze. Moglbys mi powiedziec, jak to sie dzieje ze np. w funkcji
> def insertTree (t, m : int) {
> match (t) {
> | Leaf (n) => Tree ( Leaf (n), Leaf (m), m ) ;
^^^^
> | Tree (l,r,n) => if (n < m) insertTree (r, m) else insertTree (l,m) ;
^^^^^^^^^^ ^^^^^^^^^^
> } ;
> } ;
> te wywolania sa rozpoznawane jako ogonowe (niezaleznie od tego, ze funkcja jest
> bez sensu) ?
Podkreślone.
in_tail_position oznacza, że wywołanie funkcji w tym miejscu będzie
ogonowe. Ciało funkcji jest ITP, ostatnie wyrażenie sekwnejcji ITP
jest ITP, jesli match jest ITP, to wyrażenia po => też są ITP, i chyba
jeszcze kilka reguł. Reszta (np. argumenty funkcji, wyrażenie w matchu)
nie jest ITP.
Wywołanie wg naszej aktualnej definicji jest ogonowe, jeśli w IL po nim
występuje (skok do) ret, czyli w tłumaczeniu na C, jeśli jest to postaci
return foo(...);.
--
: 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