Haskell新手如何在代码中返回(x1,x2)元组并打印输出结果
Haskell返回元组与打印实现方案
你当前的代码存在语法错误,先修正逻辑再实现元组返回、打印的完整流程:
- 原代码问题
- 守卫分支语法错误:
| 条件和赋值表达式之间缺少=,且错误地把返回值变量名写在了条件和=中间 - 没有显式构造
(x1, x2)元组作为返回值 - x2的计算逻辑未补全,以下示例按「取输入整数的个位为x1、十位为x2」的通用需求编写,你可以根据自己的实际需求调整计算规则。
- 守卫分支语法错误:
修正后的函数实现
qqq x -- 处理负数输入,先取绝对值再计算 | x < 0 = (x1, x2) where absX = -x x1 = absX `mod` 10 x2 = (absX `div` 10) `mod` 10 -- 处理0到99的正数输入 | x < 100 = (x1, x2) where x1 = x `mod` 10 x2 = (x `div` 10) `mod` 10 -- 处理大于等于100的输入,逻辑可按需修改 | otherwise = (x1, x2) where x1 = x `mod` 10 x2 = (x `div` 10) `mod` 10
打印返回元组的方法
Haskell中纯计算函数不能直接执行IO打印操作,需要在main入口函数中调用函数后再输出,示例:
main :: IO () main = do -- 传入测试参数,接收函数返回的元组 let res = qqq (-45) -- 方式1:直接打印整个元组 print res -- 方式2:拆分元组元素自定义输出格式 let (x1, x2) = res putStrLn $ "x1: " ++ show x1 ++ ", x2: " ++ show x2
补充说明
- 守卫分支的标准语法为
| 布尔条件 = 返回值,分支内用到的局部变量统一写在where块中即可 - Haskell中整数除法使用
div运算符,不要用浮点数除法/ - 非字符串类型需要通过
show转为字符串才能用putStrLn输出,直接调用print会自动完成类型转换,更方便快速调试。
内容的提问来源于stack exchange,提问作者WinnieNotThePooh
相关产品推荐
相关产品推荐

