首页 > 解决方案 > 如何在 Haskell 中执行递归主函数

问题描述

所以我想制作一个打印出 ASCII 三角形的程序。该程序会询问您希望三角形的高度并将其打印出来并一直执行,直到您输入的数字为7,然后它绘制高度为 7 的三角形,程序停止。如果数字是偶数,打印输出的三角形由“*”组成,如果数字是奇数,则由“#”组成。我想通过递归调用函数来做到这一点

triangle level character = draw level character 1 
      where draw level character accumulator
             | level <=0 = putStr("")
             | level > 0 = do 
                 putStrLn (replicate level ' ' ++ replicate accumulator character)
                 draw (level-1) character (accumulator+2)

main = do
    number <- readLn :: IO Int
    if(number `mod` 2 == 0)
      then
        triangle number'*'
        main 
     else if (number == 7)
       then triangle number '#'
       else triangle number '#'
       main

我得到的错误是

• Couldn't match expected type ‘IO () -> IO ()’
              with actual type ‘IO ()’
• The function ‘triangle’ is applied to three arguments,
  but its type ‘Int -> Char -> IO ()’ has only two
  In the expression: triangle number '*' main
  In a stmt of a 'do' block:
    if (number `mod` 2 == 0) then
        triangle number '*' main
    else
        if (number == 7) then
            triangle number '#'
        else
            triangle number '#' main

标签: haskellrecursion

解决方案



推荐阅读