Проверка параметров функции на основе заданных ограничений - PullRequest
0 голосов
/ 08 ноября 2019

Прежде чем что-то сказать, позвольте мне прояснить, что этот вопрос НЕ зависит от языка, а является частью моей работы над интерпретатором.

Допустим, у нас есть перечисление типов Value. Таким образом, значение может быть:

SV, // stringValue
IV, // integerValue
AV, // arrayValue
etc, etc

, скажем, у нас есть функция F , которая принимает одну из следующих комбинаций аргументов:

[
   [SV],
   [SV,IV],
   [AV]
]

Теперь,функция вызывается, мы вычисляем переданные значения и получаем их типы. Допустим, мы получаем [XV,YV].

Вопрос в следующем:

Какой самый эффективный способ проверить, разрешены ли переданные значения?

(Исходный интерпретатор написан на Nim, поэтому можно сказать, что мы можем искать массив значений в массиве принятых массивов значений, например: accepted.contains(passed) - но это не эффективно)


PS ^ Вот как я сейчас это делаю, хотя я также исследовал возможность использования битовых масок. Однако я не могу представить, как это могло бы помочь, поскольку порядок также играет важную роль.

...