Difference between revisions of "Chained Dictionary Assignment"
(→Spec) |
|||
Line 32: | Line 32: | ||
val create_simple : unit -> (''k,'v) dictionary | val create_simple : unit -> (''k,'v) dictionary | ||
end</nowiki> | end</nowiki> | ||
+ | |||
+ | =DictionaryUtils= | ||
+ | All three implementations of dictionary can reuse the same functions which given a list of entries produce the keys and values. | ||
+ | |||
+ | One of [http://sml-family.org/Basis/list.html List's] higher order functions can be useful here. Which one is it? | ||
+ | |||
+ | <nowiki>fun entries_to_keys(entries : (''k*'v) list) : ''k list = | ||
+ | raise NotYetImplemented | ||
+ | |||
+ | fun entries_to_values(entries : (''k*'v) list) : 'v list = | ||
+ | raise NotYetImplemented</nowiki> | ||
+ | |||
+ | =ListOfEntries (Optional But Encouraged)= | ||
=Hashtable Implementation= | =Hashtable Implementation= |
Revision as of 19:21, 2 March 2020
In this and the follow up Sorted Dictionary studio, you will build three implementations of a dictionary. Each will be a persistent, mutable data structure, so you can expect to use the ref feature of SML, either directly or via the mutable Array structure.
signature DICTIONARY = sig type (''k,'v) dictionary val get : ((''k,'v) dictionary *''k) -> 'v option val put : ((''k,'v) dictionary *''k *'v) -> 'v option val remove : ((''k,'v) dictionary *''k) -> 'v option val entries : (''k,'v) dictionary -> (''k*'v) list val keys : (''k,'v) dictionary -> ''k list val values : (''k,'v) dictionary -> 'v list end
Contents
Background
Spec
get
Behaves much like java.util.Map<K,V>'s get(key) method except instead of returning null or the associated value, it returns an option.
put
Behaves much like java.util.Map<K,V>'s put(key,value) method except instead of returning null or the previously associated value, it returns an option.
remove
Behaves much like java.util.Map<K,V>'s remove(key) method except instead of returning null or the previously associated value, it returns an option.
entries
Behaves much like java.util.Map<K,V>'s entrySet() method.
keys
Behaves much like java.util.Map<K,V>'s keySet() method.
values
Behaves much like java.util.Map<K,V>'s values() method.
SingleList Implementation
signature SINGLE_LIST_DICTIONARY = sig include DICTIONARY val create_simple : unit -> (''k,'v) dictionary end
DictionaryUtils
All three implementations of dictionary can reuse the same functions which given a list of entries produce the keys and values.
One of List's higher order functions can be useful here. Which one is it?
fun entries_to_keys(entries : (''k*'v) list) : ''k list = raise NotYetImplemented fun entries_to_values(entries : (''k*'v) list) : 'v list = raise NotYetImplemented
ListOfEntries (Optional But Encouraged)
Hashtable Implementation
signature HASHED_DICTIONARY = sig include DICTIONARY type ''k hash_function = ''k -> int val create_hashed : (int * ''k hash_function) -> (''k,'v) dictionary end