模式n中的解析错误

时间:2015-11-07 08:37:31

标签: haskell

我是哈斯凯尔的新手。 得到了解析错误,不知道出了什么问题。

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

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

请帮帮我。

2 个答案:

答案 0 :(得分:4)

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

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

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

同样,模式

fromDecTo (n x)

表示将函数n应用于x,然后将fromDecTo应用于结果的结果。这不是你想要的,用

完成两个参数
fromDecTo n x

作为最后一点,即使不习惯这样做,也可以添加括号,但具有相反的关联。可以编写上面显示的相同类型

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

强调函数在Haskell中被调用的事实:二元函数实际上是一个仅占用一个参数的函数,第一个,并返回一个函数,其中一个其他参数,第二个,最后返回结果。

同样,而不是

fromDecTo n x

我们可以写

(fromDecTo n) x

因为n首先应用于fromDecTo,然后再应用x

答案 1 :(得分:0)

您的代码中有几个问题。这是你想要实现的目标:

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