Haskell loopupKey
Haskell loopupKey
我正在尝试创建一个函数来查找没有重复键的有序键列表。如果键不存在,它输出“Nothing”,或者如果它存在,如果它是预设的,它输出“Just”,这个值的一个例子如下
lookupKey "a" [("a",1),("b",2)] == Just 1
这是我目前所拥有的
lookupKey :: Ord k => k -> [(k,v)] -> Maybe v
lookupKey x [] = Nothing
lookupKey x (k,v)
| x < k = Nothing
| x == k
我对如何完成其余代码感到困惑
主要问题是 [[k,v]]
模式。这是一个列表列表,其中内部列表包含两个元素:k
和 v
。但这不是二元组。
模式应该是:
lookupKey x ((k, v): kvs)
| x < k = Nothing
| x == k = Just …
| otherwise = …
这里k
和v
是第一个二元组的项,kvs
是其余项的列表。所以如果我们调用lookupKey "a" [("a", 1), ("b", 2)]
,那么x
就是"a"
,k
就是"a"
,v
就是1
和kvs
是 [("b", 2)]
。因此,您需要对 kvs
.
执行一些递归
我将填写 …
部分作为练习。
我正在尝试创建一个函数来查找没有重复键的有序键列表。如果键不存在,它输出“Nothing”,或者如果它存在,如果它是预设的,它输出“Just”,这个值的一个例子如下
lookupKey "a" [("a",1),("b",2)] == Just 1
这是我目前所拥有的
lookupKey :: Ord k => k -> [(k,v)] -> Maybe v
lookupKey x [] = Nothing
lookupKey x (k,v)
| x < k = Nothing
| x == k
我对如何完成其余代码感到困惑
主要问题是 [[k,v]]
模式。这是一个列表列表,其中内部列表包含两个元素:k
和 v
。但这不是二元组。
模式应该是:
lookupKey x ((k, v): kvs)
| x < k = Nothing
| x == k = Just …
| otherwise = …
这里k
和v
是第一个二元组的项,kvs
是其余项的列表。所以如果我们调用lookupKey "a" [("a", 1), ("b", 2)]
,那么x
就是"a"
,k
就是"a"
,v
就是1
和kvs
是 [("b", 2)]
。因此,您需要对 kvs
.
我将填写 …
部分作为练习。