1. Как можно посмотреть, библиотеку типов, которую предоставляет Nemerle
2. По материалам статьи "Метарограммирование Nemerle" пытался написать макрос:
[Hygienic]
cache(e : Expr) : Expr * Expr
{ | <[ $obj.$mem ]> => (<[ def tmp = $obj ]>, <[ tmp.$mem ]>)
| <[ $tab [$idx] ]> =>
(<[ def (tmp1, tmp2) = ($tab, $idx) ]>, <[ tmp1 [tmp2] ]>)
| _ => (<[()]>, e)
}
macro @<->(e1, e2)
{
def (cached1, safe1) = cache(e1);
def (cached2, safe2) = cache(e2);
<[
$cached1;
$cached2;
def tmp = $safe1;
$safe1 = $safe2;
$safe2 = tmp;
]>
}
Не компилится, пишет
Test-002-macro.n:184:1:184:6: error: parse error near identifier `cache': expecting type declaration
Test-002-macro.n:184:6:184:16: error: parse error near `(...)' group: unexpected token after type declaration
Как решить проблему?
Здравствуйте, x1, Вы писали:
x1>1. Как можно посмотреть, библиотеку типов, которую предоставляет Nemerle
Тут для начала, конечно в исходниках еще.
x1>2. По материалам статьи "Метарограммирование Nemerle" пытался написать макрос:
[skipped]
x1>Не компилится, пишет
x1>Test-002-macro.n:184:1:184:6: error: parse error near identifier `cache': expecting type declaration
Да, так и есть, функции должны быть объявлены в каком-нибудь классе.
Полная реализация примера есть в исходниках, если лень качать целиком, то
тут.