[nem-pl] Widze jak ty to widzisz
Kamil Skalski
nazgul at omega.pl
Mon Nov 3 18:15:15 CET 2003
Monday 03 of November 2003 17:25, Lukasz Kaiser wrote:
> > No i w³a¶nie tutaj napotka³em na kilka w±tpliwo¶ci:
> > wywo³ania rekurencyjne oczywi¶cie chcemy, s± dwie propozycje
> > - ext f (a : syntax_tree ) : syntax_tree =
> > match a with [
> >
> > | <[ x <- y + z ]> -> <[ x <- $f(y) - $f(z) ]>
> >
> > ...
> > lub inna wersja takiego zmieszania metajêzyka z jêzykiem
> > - ext f (a : syntax_tree ) : syntax_tree =
> > match a with [
> >
> > | <[ x <- y + z ]> -> def (ny, nz) = (f y, f z);
> >
> > <[ x <- ny - nz ]>
>
> Nie, pierwsza wersja zdecydowanie, w drugiej to niby czym ma sie roznic
> ten x na poczatku od tego nx potem ? Mysle, ze to jest za trudne i wcale
> nie jest jasne.
Po prostu u mnie zwykłe zmienne miały mniej więcej tą semantykę, ktora u
ciebie maja $(zmienne)
Na "Twoje" mozna ten przyklad przetlumaczyc
| <[ $x <- $y + $z ]> -> def (ny, nz) = (f y, f z);
<[ $x <- $ny - $nz ]>
No ale skoro juz rozumiem, o co ci chodzilo z tym $, to mnie objawilo, ze to
lepszy sposob.
> Nie, proba nie oddzielania jezyka od metajezyka skonczy sie tragicznie
> zarowno dla czytelnosci jak i dla proby implementacji, to nie jest dobra
> metoda.
U mnie było oddzielone, ale w pewien specyficzny sposob ;)
Ok, masz racje.
> przynajmniej ja nie mam zadnego pomyslu jak to zrobic w tej chwili. To
> znaczy zeby to zrobic to trzeba by cale typowanie przerobic zeby dzialalo
> na drzewach skladniowych zawierajacych B-gramatyke, to bedzie troche
> roboty. Moze zamienic na poczatek to B na jakis atrybut w typie i miec
> przynajmniej to samo tylko przypadki dopisac ? Nie wiem, to juz nie jest
> problem skladniowy.
Tak, zeby otrzymac na koncu (po wykonaniu sie rozszerzenia) typedtree, to
trzeba typowac "w locie", czyli np. przerobic typowanie calego jezyka... Ale
czy na pewno chcemy mieszac nasze rozszerzenia z typami? Kusi mnie pomysl,
zeby rozszerzenia traktowaly typy czysto syntaktycznie. Pewnie utnie to
jakies mozliwosci, ale przynajmniej bedzie proste do zrobienia. Niech otypuje
sie dopiero po wszystkim - to wymusza brak mozliwosci dobrania sie do typow
w matchowaniu wyrazen, ale nie uniemozliwia zabawy z typami, funkcjami,
klasami (tyle ze bedzie ona na poziomie stringow).
> E_fun_parm ( s, t ) -> ...
> E_fun_parm ( s, t ) :: xs -> ...
To bylby tak naprawde jedyny moment, w ktorym znamy typ parametrow... No ale
moze dobrym pomyslem jest napisanie takiego ubogiego systemu, a potem
zastanowienie sie jak inteligentniej typowac rozszerzenia.
More information about the devel-pl
mailing list