2014-10-13 4 views
0

Мне было дано задание написать функцию поиска для этого типа данных хэш-таблицы в SML;Функция поиска таблицы Hash в SML

datatype 'a ht = table of (int * ('a list)) list; 

, который возвращает нуль, если таблица пуста и/или ключ не существует в таблице. функция должна быть эта

val lookup = fn : int -> 'a ht -> 'a list 

, но я не знаю, как смотреть в каждом ведре хэш-таблицу или отобразить значение ведре ключа. Я был бы признателен за помощь в том, какой алгоритм использовать.

например, функция должна работать следующим образом;

-lookup 3 (table [(1, [2,3]), (2, [3,4,5]), (3, [4])]); 
    val it = [4] : int list 
-lookup 4 (table [(1, [2,3]), (2, [3,4,5]), (3, [4])]); 
    val it = [] : int list 
+0

Я попытался использовать функцию поиска, чтобы упростить ее; забава найти ключ ноль = ложь | find key (x :: rest) = if key = x, тогда true else find key (rest); , но, по-видимому, это для списка и не принимает хэш-таблицу. Я ищу способ применить это к хеш-таблице. , а затем как-то распечатать значение ключа, если оно существует. – misrat

+0

сначала напишите функцию, которая находит int в списке int – Gergely

ответ

0

Ваша хеш-таблица представляет собой список пар.

для забавного поиска n table = ... Сначала вам понадобится функция перемещения по списку пар в n-ое положение. вы могли бы использовать что-то вроде

case table of 
table [] => nil 
|table ls => lookup n-1 table (tl ls) 

Второму получить значение (# 2 пары) или путем сопоставления с образцом, когда второй аргумент вашей функции поиска сводится к 1 в рекурсии, предполагая ключи ранжируются как в ваших примерах. Тогда просто верните его.

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