[nem-pl] Dalsze rozważania o higienicznych makrach

Kamil Skalski nazgul at omega.pl
Mon Feb 23 23:06:43 CET 2004


Monday 23 of February 2004 22:52, Marcin 'Qrczak' Kowalczyk wrote:
> > A ja tu jeszcze mam inną wątpliwość, bo quotowanie jest używane nie tylko
> > w makrach - np. ja sobie piszę w algorytmie budowania quotowań używając
> > quotowań, które służą mi do niczego innego jak do skrócenia zapisu drzew
> > składniowych. Nic nie jest tu expandowane, wszystko dzieje się w tej
> > samej kompilacji. I co, mam w nich stracić możliwość automatycznego
> > rozwijania nazw?
>
> Nie rozumiem.

macros.n:495:
      | <[ $target <- $source ]> =>
        <[ Nemerle.Compiler.Parsetree.
	       E_assign ($(quoted_expr (ctx, qctx, target)), 
                              $(quoted_expr (ctx, qctx, source))) ]>

to jest operacja wykowynawa po prostu na drzewach rozbioru wyrażeń zawartych w 
<[ ... ]>. Operator ten jest tu traktowany jako funkcja Expr -> Expr, która 
"liftuje" wyrażenia o jeden poziom w górę. Zauważ, że zacytowane wyrażenia 
nie biorą udziału w ANI JEDNEJ ekspansji makr. 

Co więcej, nasz prosty system umożliwi mi skrócenie tego do
using Nemerle.Compier.Parsetree;
...
     | <[ $target <- $source ]> =>
        <[ E_assign ($(quoted_expr (ctx, qctx, target)), 
                           $(quoted_expr (ctx, qctx, source))) ]>






More information about the devel-pl mailing list