【问题标题】:How to re-use a function to effectively 'loop' in Haskell如何在 Haskell 中重用一个函数来有效地“循环”
【发布时间】:2026-01-03 16:20:02
【问题描述】:

我有一个简短的交互对话框,计算机要求输入一个数字,如果它小于 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 putStrLn "Tiny, try again!";
                                  myread
                             else putStrLn "Massive!";
               
               

在我的逻辑中,调用 myread 应该将它恢复到顶部并允许您继续直到达到 n > 77。任何帮助将不胜感激:)

为帮助家伙干杯,我现在明白了。从最初不取出then putStrLn "Tiny, try again!" 并用我现在理解的以下内容替换块来挣扎

if result < 77 then do putStrLn "Tiny, try again!";
                                   isItLarge
                           else putStrLn "Massive!";

【问题讨论】:

    标签: function haskell do-loops


    【解决方案1】:

    对于您问题中的特定程序,最简单的方法是将您对myread 的第二次调用替换为对isItLarge 的递归调用。

    【讨论】:

    • 并且还使用附属的do 块对putStrLnisItLarge 调用进行排序
    最近更新 更多