Haskell元组集合推导时出现‘parse error in pattern’错误求助
Haskell集合S实现的问题解决
问题根源
你代码里的列表推导式条件部分语法错误:let 2*x + y = 7是错误写法。let用于在推导式中绑定局部变量,而非做相等判断;同时Haskell中相等判断要用==,赋值用=,混淆两者会导致语法错误或逻辑错误。
修正后的代码
b = [1..20] -- 简化写法,和[1,2..20]等价 s = [(x,y) | x <- b, y <- b, 2*x + y == 7] main = do print s
运行结果
输出符合预期:[(1,5),(2,3),(3,1)]
额外优化(可选)
考虑到y可由7-2x直接计算,没必要遍历整个集合B,能提升效率:
b = [1..20] s = [(x, 7-2*x) | x <- b, let y=7-2*x, y `elem` b] main = do print s
这个版本先通过x计算出y,再判断y是否属于集合B,避免了不必要的遍历。
内容的提问来源于stack exchange,提问作者Tanix
相关产品推荐
相关产品推荐

