Haskell问题“解析错误(可能是缩进不正确或括号不匹配)”

9bfwbjaz  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(125)

我是新来的 haskell 和种挣扎与一个问题,我甚至不知道我明白,所以我可以使用一些帮助来解决它...
我试图创建一个简单的函数,给定三个数字“a”、“B”和“c”,将显示所有“a”小于“b”且“b”小于“c”的组合,同时递增它们。例如,“4”、“5”和“6”将给出类似于“456、457、458、459、467、468、469、478”的结果。第479、489、567、568、569、578、579、589、678、679、689、789条”
到目前为止,我的代码如下所示:

axx :: Int -> Int -> Int -> Int
  axx (x) (y) (z) = if y == 8 && z == 9
                        then x + 1
                        else x
  
  ayy :: Int -> Int -> Int -> Int
  ayy (x) (y) (z) = let y = if z == 9 && y < 8
                                then y + 1
                                else if z == 9 && y == 8
                                then x + 1
                                else y
  
  azz :: Int -> Int -> Int -> Int
  azz (x) (y) (z) = let z = if z == 9
                                then y + 1
                                else z + 1
  
  my_print_comb :: Int -> Int -> Int -> IO ()
  my_print_comb (x) (y) (z) = do print (x)
                                 print (y)
                                 print (z)
                                 if (x /= 7 && y /= 8 && z /= 9)
                                     then do
                                         putStr ", "
                                         let x = axx (x y z)
                                         let y = ayy (x y z)
                                         let z = azz (x y z)
                                         my_print_comb(x y z)
                                     else putStr "\n"

但是当我试图编译它的时候,我得到了关于我的“azz”函数开始的行的“parse error(possible indepression or mismatched brackets)”错误信息。我试图在网上寻找类似的情况,但是到目前为止没有任何运气。
有人能帮我吗?

nzrxty8p

nzrxty8p1#

你可以去掉很多括号:axx (x) (y) (z)-〉axx x y zprint (x)应该写为print x
李耀说,你必须去掉let y =let z =
同时删除括号

let x = axx (x y z)
  let y = ayy (x y z)
  let z = azz (x y z)
  my_print_comb(x y z)
let x = axx x y z
      y = ayy x y z
      z = azz x y z
  my_print_comb x y z

否则,x被解释为应用于yz的函数。
使用函数应用程序清单,您所写的是axx $ ((x $ y) $ z),而您所指的是((axx $ x) $ y) $ z

infixr 0 $

($) :: (a -> b) -> a -> b
($) = id

通常,您使用模式匹配axx 8 y 9 = ..来代替检查axx x y z = if x == 8 && z == 9 then .. else
使用undefined :: a进行迭代开发

axx :: Int -> Int -> Int -> Int
axx x 8 9 = x + 1
axx x y z = undefined

尝试将IOmy_print_comb中分离出来。

kqlmhetl

kqlmhetl2#

删除ayyazz中的let y =let z =

相关问题