You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell实现仅对偶数平方、奇数保持原值的函数求助

问题分析与修复方案

你的代码存在两个核心问题:

  1. 类型不匹配:函数声明square:: Int -> Int表示接受单个整数、返回单个整数,但右侧的列表推导式返回的是整数列表[Int],编译会直接报错。
  2. 逻辑偏离需求:当前代码是生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:07:08