Другой подход заключается в преобразовании combination
в символ.Полученный код будет выглядеть следующим образом:
(case (intern combination)
(EEEEE 0)
(EEEEP 1)
(EEEPE 1)
...)
Но вы должны иметь в виду, что intern
работает во время выполнения в контексте текущего пакета (*package*
), что означает, что если это частьфункции, которая вызывается вне пакета, в котором она определена, она не будет работать.Есть два способа обойти это (в основном, два варианта одного): либо intern в пакете ((intern combination <your-package>)
), либо intern в качестве ключевого слова.В последнем случае вся форма будет выглядеть следующим образом:
(case (intern combination :keyword)
(:EEEEE 0)
(:EEEEP 1)
(:EEEPE 1)
...)
Также стоит отметить соображения производительности.Они не должны быть проблемой, поскольку, хотя intern
ing является довольно сложной операцией, первоначально, когда она вызывается повторно для уже интернированного символа, это, в основном, просто поиск по словарю.