أفترض أن الفكرة هي إنشاء سلاسل رسم خرائط الجدول إلى الأعداد الصحيحة. ثم تريد أن تكتب نوعه باسم (string, int) hash_table
(نوع hash_table
هو نوع مع معلمتين ، وكتب هكذا في مل).
لكنك تحتاج أيضًا إلى وظيفة تجزئة hash : string -> word
ووظيفة المساواة eq : string * string -> bool
على الأوتار لتوفيرها mkTable
. بالنسبة لهذا الأخير ، يمكنك ببساطة استخدام op=
, ، بالنسبة إلى الأول يمكنك استخدامه HashString.hashString
من الوحدة النمطية المعنية.
لذا،
val ht : (string, int) HashTable.hash_table = HashTable.mkTable(HashString.hashString, op=)(17, Domain)
يجب أن تعمل.
ومع ذلك ، يجب أن أشير إلى أن جداول التجزئة تميل إلى الاستخدام المفرط بشكل كبير ، وفي أكثر الأحيان هي بنية البيانات الخاطئة. هذا صحيح بشكل خاص في البرمجة الوظيفية ، لأنها هيكل بيانات مفيد. عادة ما تكون أفضل حالًا (وربما أكثر كفاءة) باستخدام بعض الخريطة القائمة على الأشجار ، على سبيل المثال ، RedBlackMapFn
من مكتبة SML/NJ.