Difference between revisions of "Sorted Dictionary Assignment"
Jump to navigation
Jump to search
Line 9: | Line 9: | ||
SortedDictionary must: | SortedDictionary must: | ||
− | * have O(lg N) expected performance for <code> | + | * have O(lg N) expected performance for <code>get</code>, <code>put</code>, and <code>remove</code>. |
* produce <code>entries</code> and <code>keys</code> in sorted order based on the provided <code>compare_function</code>. | * produce <code>entries</code> and <code>keys</code> in sorted order based on the provided <code>compare_function</code>. | ||
* produce <code>values</code> in the sorted order of each value's key based on the provided <code>compare_function</code>. | * produce <code>values</code> in the sorted order of each value's key based on the provided <code>compare_function</code>. | ||
− | <nowiki>structure SortedDictionary | + | <nowiki>structure SortedDictionary = DictionaryFn(struct |
+ | type ''k compare_function = (''k*''k) -> order | ||
− | + | ||
− | type ''k | + | (* TODO: replace unit with the type you decide upon *) |
− | + | type (''k,'v) dictionary = unit | |
− | + | ||
+ | |||
+ | type ''k create_parameter_type = ''k compare_function | ||
+ | |||
+ | fun create(cmp : ''k compare_function) : (''k,'v) dictionary = | ||
+ | raise Fail "NotYetImplemented" | ||
− | + | fun get(dict : (''k,'v) dictionary, key:''k) : 'v option = | |
− | + | raise Fail "NotYetImplemented" | |
− | + | fun put(dict : (''k,'v) dictionary, key:''k, value:'v) : (''k,'v) dictionary * 'v option = | |
+ | raise Fail "NotYetImplemented" | ||
− | + | fun remove(dict : (''k,'v) dictionary, key : ''k) : (''k,'v) dictionary * 'v option = | |
− | + | raise Fail "NotYetImplemented" | |
− | |||
− | |||
− | + | fun entries(dict : (''k,'v) dictionary) : (''k*'v) list = | |
+ | raise Fail "NotYetImplemented" | ||
− | |||
− | |||
− | |||
− | |||
− | |||
end)</nowiki> | end)</nowiki> | ||
− | |||
− | |||
− | === | + | ===type dictionary=== |
− | ==== create ==== | + | Change the definition of <nowiki>type (''k,'v) dictionary</nowiki> to support SortedDictionary. |
+ | |||
+ | <nowiki>(* TODO: replace unit with the type you decide upon *) | ||
+ | type (''k,'v) dictionary = unit</nowiki> | ||
+ | |||
+ | ===type create_parameter_type=== | ||
+ | Leave create_parameter_type unchanged. SortedDictionary's create method accepts no parameters, so <nowiki>''k compare_function</nowiki> is the correct type. | ||
+ | |||
+ | <nowiki>type ''k create_parameter_type = ''k compare_function</nowiki> | ||
+ | |||
+ | === create === | ||
<nowiki>fun create(cmp : ''k compare_function) : (''k,'v) dictionary = | <nowiki>fun create(cmp : ''k compare_function) : (''k,'v) dictionary = | ||
raise Fail "NotYetImplemented"</nowiki> | raise Fail "NotYetImplemented"</nowiki> | ||
− | + | ||
+ | === get === | ||
+ | <nowiki>fun get(dict : (''k,'v) dictionary, key : ''k) : 'v option = | ||
+ | raise Fail "NotYetImplemented"</nowiki> | ||
+ | |||
A function from [[Binary_Search_Tree_Assignment#Code_to_Implement|BinarySearchTree]] should be useful here. | A function from [[Binary_Search_Tree_Assignment#Code_to_Implement|BinarySearchTree]] should be useful here. | ||
− | + | ||
+ | === put === | ||
+ | <nowiki>put(dict : (''k,'v) dictionary, key : ''k , value : 'v) : (''k,'v) dictionary * 'v option = | ||
+ | raise Fail "NotYetImplemented"</nowiki> | ||
A function from [[Binary_Search_Tree_Assignment#Code_to_Implement|BinarySearchTree]] should be useful here. | A function from [[Binary_Search_Tree_Assignment#Code_to_Implement|BinarySearchTree]] should be useful here. | ||
− | + | ||
+ | === remove === | ||
+ | <nowiki>fun entries(dict : (''k,'v) dictionary) : (''k*'v) list = | ||
+ | raise Fail "NotYetImplemented"</nowiki> | ||
A function from [[Binary_Search_Tree_Assignment#Code_to_Implement|BinarySearchTree]] should be useful here. | A function from [[Binary_Search_Tree_Assignment#Code_to_Implement|BinarySearchTree]] should be useful here. | ||
Revision as of 10:20, 12 October 2022
Contents
Code To Use
Binary Search Tree
You will undoubtedly want to use the tree you implemented in the Binary Search Tree assignment.
DictionaryFn
The structure SortedDictionary has been setup to re-use functor DictionaryFn from the Chained Dictionary exercise.
Code To Implement
structure SortedDictionary
SortedDictionary must:
- have O(lg N) expected performance for
get
,put
, andremove
. - produce
entries
andkeys
in sorted order based on the providedcompare_function
. - produce
values
in the sorted order of each value's key based on the providedcompare_function
.
structure SortedDictionary = DictionaryFn(struct type ''k compare_function = (''k*''k) -> order (* TODO: replace unit with the type you decide upon *) type (''k,'v) dictionary = unit type ''k create_parameter_type = ''k compare_function fun create(cmp : ''k compare_function) : (''k,'v) dictionary = raise Fail "NotYetImplemented" fun get(dict : (''k,'v) dictionary, key:''k) : 'v option = raise Fail "NotYetImplemented" fun put(dict : (''k,'v) dictionary, key:''k, value:'v) : (''k,'v) dictionary * 'v option = raise Fail "NotYetImplemented" fun remove(dict : (''k,'v) dictionary, key : ''k) : (''k,'v) dictionary * 'v option = raise Fail "NotYetImplemented" fun entries(dict : (''k,'v) dictionary) : (''k*'v) list = raise Fail "NotYetImplemented" end)
type dictionary
Change the definition of type (''k,'v) dictionary to support SortedDictionary.
(* TODO: replace unit with the type you decide upon *) type (''k,'v) dictionary = unit
type create_parameter_type
Leave create_parameter_type unchanged. SortedDictionary's create method accepts no parameters, so ''k compare_function is the correct type.
type ''k create_parameter_type = ''k compare_function
create
fun create(cmp : ''k compare_function) : (''k,'v) dictionary = raise Fail "NotYetImplemented"
get
fun get(dict : (''k,'v) dictionary, key : ''k) : 'v option = raise Fail "NotYetImplemented"
A function from BinarySearchTree should be useful here.
put
put(dict : (''k,'v) dictionary, key : ''k , value : 'v) : (''k,'v) dictionary * 'v option = raise Fail "NotYetImplemented"
A function from BinarySearchTree should be useful here.
remove
fun entries(dict : (''k,'v) dictionary) : (''k*'v) list = raise Fail "NotYetImplemented"
A function from BinarySearchTree should be useful here.
Testing
Complete
source folder: | src/test/sml/dictionary/sorted |
how to run with CM.make verbosity off: | sml -Ccm.verbose=false run_sorted_testing.sml |
how to run with CM.make verbosity on: | sml run_sorted_testing.sml |
note: ensure that you have removed all printing to receive credit for any assignment.
Without Remove
sml -Ccm.verbose=false run_sorted_testing.sml --remove=false
sml run_sorted_testing.sml --remove=false
Pledge, Acknowledgments, Citations
file: | studio-sorted-dictionary-pledge-acknowledgments-citations.txt |
More info about the Honor Pledge