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

Haskell如何复用函数实现循环:数字判断交互逻辑问题求解

问题原因

你的代码存在两个核心错误:

  • if 的then分支缺少do关键字包裹多步操作。在Haskell的do代码块中,if的单个分支如果要执行多条IO操作,必须显式用do把这些操作包装为一个整体,否则只有紧跟在then后面的第一条语句属于then分支,后续语句会被视为外层do块的内容,不管条件是否成立都会执行。
  • 错误调用了myread而非递归调用isItLarge。你需要回到「输入→判断」的完整流程才能实现循环重试,myread仅负责读取输入,没有后续的判断逻辑,调用它只会读取一次数字就丢弃结果,不会继续校验数值大小。

你后续修改的代码是完全正确的,修改后then分支用do包裹了提示和递归调用两个操作,递归调用isItLarge会重新触发完整的输入判断流程,直到输入数值≥77时输出对应提示结束程序。

修正后的完整可运行代码如下:

import Text.Read

myread :: IO Int
myread  = do putStr "Please enter a number: "             
             x <- readLn             
             return x

isItLarge :: IO()
isItLarge = do
              result <- myread
              if result < 77 
                then do
                  putStrLn "Tiny, try again!"
                  isItLarge
                else putStrLn "Massive!"

内容的提问来源于stack exchange,提问作者user17350600

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:45:04