doubleMe :: Int -> Int
doubleMe x = x + x
doubleUs :: Int -> Int
doubleUs x y = doubleMe x+y
我试图利用函数doubleMe
获得x
和y
之和的两倍。我究竟做错了什么?
无法编译的新代码:
doubleMe :: Int -> Int
doubleMe x = x + x
doubleUs :: Int -> Int -> Int
doubleUs x y = x*2 + y*2
doubleUs2 :: Int -> Int -> Int
doubleUs2 :: x y = doubleMe (x+y)
答案 0 :(得分:5)
函数应用程序的优先级高于+
和其他运算符,因此doubleMe x+y
被解析为(doubleMe x)+y
。要解决此问题,请写下doubleMe (x+y)
。
答案 1 :(得分:5)
由于函数应用程序的优先级,你应该使用括号,你的doubleUs
声明也是错误的,因为需要两个Int
s:
doubleUs :: Int -> Int -> Int
doubleUs x y = doubleMe (x+y)