Это звучит как ошибочная идея.Как будет использоваться эта «таблица хешей»?Какую алгоритмическую сложность вы ожидаете от различных операций?Почему вы хотите реализовать хеш-таблицу на языке, который не нуждается в хеш-таблицах, реализованных пользователями?
Единственный полуприличный способ сделать это будет использовать плоскуютермин для таблицы, один аргумент на ведро.Если у вас есть k блоков, то вы используете термин с этой арностью k, поэтому для 256 блоков вы получите hash_table/256
.
empty_hash_table(T) :-
length(Buckets, 256),
maplist(=(nil), Buckets),
T =.. [hash_table|Buckets].
Теперь вы можете использовать arg/3
, чтобы получитьведро в постоянное время.Вы можете использовать setarg/3
, чтобы изменить их.
Но все это начинает звучать очень подозрительно.Вы должны объяснить свои причины лучше.Почему вы хотите реализовать хэш-таблицу в Прологе?Как это будет использоваться?