Próbuję utworzyć funkcję, która szuka zamówionej listy kluczy, gdzie nie ma duplikatów kluczy. Jeżeli jeśli klucz nie jest obecny, wyjściowy "nic" lub jest obecny, jeśli jest to ustawione wyjścia "tylko" i wartość przykład tego przykładu jest następujący

  lookupKey "a" [("a",1),("b",2)] == Just 1

To, co mam do tej pory

lookupKey :: Ord k => k -> [(k,v)] -> Maybe v
lookupKey x [] = Nothing
lookupKey x (k,v) 
   | x < k = Nothing
   | x == k 

Utknąłem na tym, jak wypełnić resztę kodu

0
Tony 10 październik 2020, 18:06

1 odpowiedź

Najlepsza odpowiedź

Głównym problemem jest wzór [[k,v]]. Jest to lista list, w których lista wewnętrzna zawiera dwa elementy: k i v. Ale to nie jest 2-krotka.

Wzór powinien być:

lookupKey x ((k, v): kvs)
    | x < k = Nothing
    | x == k = Just …
    | otherwise = …

Tutaj k i v to elementy pierwszej 2-krotki, a {x2}} to lista pozostałych elementów. Więc jeśli zadzwonisz lookupKey "a" [("a", 1), ("b", 2)], to x "a" k k "a" v 1 i 1 }} {{x11}}. W ten sposób będziesz musiał wykonać trochę rekurencji na {{x12}}.

Pozostawiam wypełnienie części jako ćwiczenie.

1
Willem Van Onsem 10 październik 2020, 15:19