Прежде чем что-то сказать, позвольте мне прояснить, что этот вопрос НЕ зависит от языка, а является частью моей работы над интерпретатором.
Допустим, у нас есть перечисление типов Value. Таким образом, значение может быть:
SV, // stringValue
IV, // integerValue
AV, // arrayValue
etc, etc
, скажем, у нас есть функция F , которая принимает одну из следующих комбинаций аргументов:
[
[SV],
[SV,IV],
[AV]
]
Теперь,функция вызывается, мы вычисляем переданные значения и получаем их типы. Допустим, мы получаем [XV,YV]
.
Вопрос в следующем:
Какой самый эффективный способ проверить, разрешены ли переданные значения?
(Исходный интерпретатор написан на Nim, поэтому можно сказать, что мы можем искать массив значений в массиве принятых массивов значений, например: accepted.contains(passed)
- но это не эффективно)
PS ^ Вот как я сейчас это делаю, хотя я также исследовал возможность использования битовых масок. Однако я не могу представить, как это могло бы помочь, поскольку порядок также играет важную роль.