Haskell实现仅对偶数平方、奇数保持原值的函数求助
问题分析与修复方案
你的代码存在两个核心问题:
- 类型不匹配:函数声明
square:: Int -> Int表示接受单个整数、返回单个整数,但右侧的列表推导式返回的是整数列表[Int],编译会直接报错。 - 逻辑偏离需求:当前代码是生成1到10中所有偶数的平方列表,而你需要的是对单个输入的数,偶数则平方、奇数保持原值。
修复后的代码(单个整数处理)
如果是处理单个整数,最直接的写法是用条件判断:
square :: Int -> Int square x = if even x then x * x else x
或者用Haskell更常用的守卫式写法:
square :: Int -> Int square x | even x = x * x | otherwise = x
扩展:处理整数列表
如果你实际需求是处理一个整数列表(比如对[1..10]中的每个元素做偶数平方、奇数保留),那需要调整函数类型为列表到列表的映射:
squareList :: [Int] -> [Int] squareList xs = [ if even x then x*x else x | x <- xs ]
调用squareList [1..10]会得到结果:[1,4,3,16,5,36,7,64,9,100]
内容的提问来源于stack exchange,提问作者Yavuzhan Canli
相关产品推荐
相关产品推荐

