[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