2016-05-19 1 views
2

Что бы я ни ввел в аргумент Exp.ident, результат всегда дает то же значение хэш-функции. Почему это?Постоянное столкновение Hashtbl.hash с Parsetree.expression

utop # Hashtbl.hash (Exp.ident {Location.txt=(Longident.Lident "bar");loc=Location.none}) ;; 
- : int = 99094472 

utop # Hashtbl.hash (Exp.ident {Location.txt=(Longident.Lident "foo");loc=Location.none}) ;; 
- : int = 99094472 

utop # Hashtbl.hash (Exp.ident {Location.txt=(Longident.Lident "");loc=Location.none}) ;; 
- : int = 99094472 

ли Parsetree.expression использовать какой-то волшебный, что структура данных не может идтись структурной хэш-генератор?

ответ

4

Чтобы гарантировать, что hash всегда заканчивается, он имеет максимальную глубину. Такая же проблема возникает, когда у вас есть списки, которые начинаются с того же самого.

Если это вам необходимо, хорошим решением является создание собственной хэш-функции, в случае Parsetree, я предлагаю вам взглянуть на Ast_iterator.

 Смежные вопросы

  • Нет связанных вопросов^_^