Могут ли спецификации соответствия использоваться только для отслеживания и выбора из таблиц ets?Могут ли они быть использованы в выражении падежа? - PullRequest
3 голосов
/ 06 марта 2012

Есть ли способ использовать спецификацию соответствия для выбора между различными предложениями функции?Я видел спецификации совпадений, используемые только для трассировки или сопоставления записей в таблицах ets.

Пример того, что я хочу сделать:

В предоставленном пользователем файле:

Module(m1),  
Function(f1),  
Guard([ %% list of match specifications follows:  
  %% First (and only in this case) match spec:  
   { [{score, '$1', '$2', '$3'}, '$4'], 
       [{is_atom, '$1'}, {is_pid, '$2'}, {is_atom, '$3'}], 
     [true] }  
  ]).

Из этого файла я хочу сгенерировать код.Для меня важно иметь возможность использовать спецификации соответствия в Guard, чтобы отфильтровывать предложения f1 так, чтобы я мог знать, когда первым аргументом f1 был кортеж вида {score, First, Second,Третий} и is_atom (Первый), is_pid (Второй), is_atom (Третий).

Есть ли способ для меня, чтобы сгенерировать такой код:

case some_unknown_function(MatchSpec, F1Args) of
  true ->
    %% f1's clause matches the MatchSpec
    ;
  false ->
    %% f1's clause does not match the MatchSpec
end.

Любая помощь будет многооценили.Спасибо.

1 Ответ

8 голосов
/ 07 марта 2012

Посмотрите на ets:match_spec_compile/1 и ets:match_spec_run/2, они делают именно то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...