2015-11-07 63 views
0

我是新来的哈斯克尔。 得到一个解析错误,不知道什么是错的。模式n解析错误

fromDecTo :: (Int -> Int) -> [Int] 
fromDecTo (n x) | (n < x) = [n] 
       | otherwise = fromDecTo (n `div` x) ++ [n `mod` x] 

这应该将十进制数转换为基数为x(a.e.十六进制)的数字。

请帮帮我。

回答

4
fromDecTo :: (Int -> Int) -> [Int] 

这是具有一个的说法,从整数到整数功能的功能。这是不是你想要的:你想有两个参数的函数,即

fromDecTo :: Int -> Int -> [Int] 

同样,图案

fromDecTo (n x) 

表示将函数nx,然后应用fromDecTo到的结果结果。这是不是你想要的,带有两个参数与

fromDecTo n x 

做最后要注意,即使它不是习惯这样做,就可以添加括号,但相反的关系。上面所示的相同类型的可写入

fromDecTo :: Int -> (Int -> Int) 

其中强调功能在Haskell咖喱的事实:一个二进制函数实际上是只服用一个参数,第一,并返回一个函数采取一个的功能等论点,第二,最后返回结果。

类似的,而不是

fromDecTo n x 

因为n是后应用于fromDecTo,然后再x我们可以写

(fromDecTo n) x 

+0

谢谢!现在工作 – 04k

0

在代码中有几个问题。这里是你想要达到的目标:

fromDecTo :: Int -> Int -> [Int] 
fromDecTo n x | (n < x) = [n] 
       | otherwise = fromDecTo (n `div` x) x ++ [n `mod` x]