功能顺序应用程序

时间:2015-11-04 13:51:16

标签: haskell

doubleMe :: Int -> Int
doubleMe x = x + x

doubleUs :: Int -> Int
doubleUs x y = doubleMe x+y

我试图利用函数doubleMe获得xy之和的两倍。我究竟做错了什么?

无法编译的新代码:

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)

2 个答案:

答案 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)