如何为给定的Haskell函数e构造满足e z == 0的参数z?
问题分析与构造方案
我们先逐层拆解函数的模式匹配规则和类型约束:
- 函数
e的入参类型为[[(c,[d])]],是元素为二元组的二维列表,二元组第一个值为任意类型c,第二个值为任意类型d的列表。 - 匹配模式
[(x,xs):[y,ys]]的结构拆解:- 最外层
[ ... ]:入参必须是仅包含1个元素的列表,这个元素本身是一个[(c,[d])]类型的一维列表 - 内层
(x,xs):[y,ys]:匹配的一维列表由:运算符拆为头部和尾部,头部是第一个二元组元素(x,xs),尾部是长度为2的列表[y,ys],也就是整个内层一维列表总共有3个二元组元素
- 最外层
可直接运行的构造结果
使用最通用的单位类型()填充类型变量位,构造的z如下:
z :: [[((), [()])]] z = [ [ ((), []), ((), []), ((), []) ] ]
验证测试
在GHCi中执行以下代码可验证结果:
-- 先定义函数e e :: [[(c,[d])]] -> Int e [(x,xs):[y,ys]] = 0 -- 构造z let z = [ [ ((), []), ((), []), ((), []) ] ] -- 调用验证,返回0即符合要求 e z
内容的提问来源于stack exchange,提问作者Mantra1
相关产品推荐
相关产品推荐

