Я собирался провести какое-то вычислительное исследование в области nlp и потратил некоторое время на то, как построить наилучшую возможную архитектуру. Спустя некоторое время, рассмотрев некоторые приемы, которые помогают достичь наилучшей производительности (или, по крайней мере, амортизировать ее), я остановился на запоминании функций, которое не поддерживается sql локальной базой данных (в частности, mongodb). Но когда дело дошло до реализации в коде, я застрял.
//i created a class function, which can be inherited when needed
class Function<Arguments, ReturnType>
//it was serving its purpose quite well. Like that
let summ = Function() { (a: Int, b: Int) -> Int in
return a + b
}
//some sugar for convenience
let answ = summ <<! (a: 1, b: 1) //type of Arguments is (Int, Int) or tuple of two integers
Затем пришло время сделать кешированную версию:
class CachingFunction<Arguments, ReturnType>: Function<Arguments, ReturnType>
Она все еще инициализируется и работает как раньше, но я не может реализовать мемоизацию, так как для этого мне понадобится Dictionary<Hashable, Value>
, что в настоящий момент недостижимо, потому что у него нет Existential types
. Моя первоначальная интуиция состояла в том, чтобы проверить кортежи на соответствие протоколу Hashable
и вычислить значение ha sh каждого элемента, объединить их и поместить в словарь, но эта попытка также не удалась.
Итак, мой вопрос: Как бы вы вычислили га sh аргументов, представленных как кортеж, или, может быть, я выбрал неправильный подход? Могу ли я справиться с этим Dictionary<AnyHashable, Any>
? Должен ли я выбрать другой язык? Пожалуйста, помогите.