Haskell模式匹配实践:基于自定义Assignment类型实现lookupA查询函数
Haskell 模式匹配实现 Assignment 查找函数
实现代码
lookupA :: Assignment -> String -> Integer lookupA EmptyA _ = 0 lookupA (Assign key val rest) s | key == s = val | otherwise = lookupA rest s
逻辑说明
- 你定义的
Assignment是递归结构的键值对链表,Assign构造器的三个参数分别对应当前节点的键、值、后续节点 - 这里用到的模式匹配核心逻辑是:直接在函数参数位置拆分数据构造器,不需要额外写取值函数就能直接提取节点内的所有字段,我们把非空的输入直接匹配为
(Assign key val rest),就能直接拿到当前键key、当前值val、后续链表rest三个变量 - 匹配到
Assign节点后走两个判断分支:- 若当前键和待查找的字符串相等,直接返回当前节点存储的值
- 若不相等,递归调用
lookupA查询后续链表即可
- 如果遍历到末尾的
EmptyA空节点,就会命中第一个分支返回默认值0
你给出的示例lookupA myAssn "y"运行时会跳过前两个键为x的节点,命中第三个键为y的节点返回3,完全符合需求。
内容的提问来源于stack exchange,提问作者Stefanie Haid
相关产品推荐
相关产品推荐

