我是新来的 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)”错误信息。我试图在网上寻找类似的情况,但是到目前为止没有任何运气。
有人能帮我吗?
2条答案
按热度按时间nzrxty8p1#
你可以去掉很多括号:
axx (x) (y) (z)
-〉axx x y z
。print (x)
应该写为print x
。李耀说,你必须去掉
let y =
和let z =
。同时删除括号
否则,
x
被解释为应用于y
和z
的函数。使用函数应用程序清单,您所写的是
axx $ ((x $ y) $ z)
,而您所指的是((axx $ x) $ y) $ z
。通常,您使用模式匹配
axx 8 y 9 = ..
来代替检查axx x y z = if x == 8 && z == 9 then .. else
。使用
undefined :: a
进行迭代开发尝试将
IO
从my_print_comb
中分离出来。kqlmhetl2#
删除
ayy
和azz
中的let y =
和let z =
。