Difference between revisions of "Chained Dictionary Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
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

Background

Refs and Arrays

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

Hash table

Hash table 5 0 1 1 1 1 1 LL.svg

SML Array Structure

signature HASHED_DICTIONARY = sig include DICTIONARY
    type ''k hash_function = ''k -> int
    val create_hashed : (int * ''k hash_function) -> (''k,'v) dictionary
end