Несколько вопросов
От: x1 http://www.agpage.ru
Дата: 27.06.07 05:41
Оценка:
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

Как решить проблему?
Re: Несколько вопросов
От: Иванков Дмитрий Россия  
Дата: 27.06.07 11:28
Оценка:
Здравствуйте, 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
Да, так и есть, функции должны быть объявлены в каком-нибудь классе.
Полная реализация примера есть в исходниках, если лень качать целиком, то тут.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.