5

我对 Haskell 编程相当陌生,我无法理解为什么在我的代码中收到此错误。

我的问题如下:任何正整数 i 都可以表示为 i = 2^n*k,其中 k 是奇数,也就是奇数的 2 次幂。我们称 n 为 2 在 i 中的指数。例如,2 在 40 中的指数是 3(因为 40 = 2^3*5),而 2 在 42 中的指数是 1。如果 i 本身是奇数,则 n 为零。另一方面,如果 i 是偶数,这意味着它可以被 2 整除。编写一个函数 exponentOfTwo 以在其参数中找到 2 的指数。

我理解伪代码,它似乎相当简单:递归地将 i 除以 2 直到结果为奇数,除法发生的次数为 n

这是我的代码(第 31-32 行):

exponentOfTwo :: Int -> Int  
exponentOfTwo i = if odd i then 0 else 1 + exponentOfTwo (i 'div' 2)  

我在第 32 行第 62 列收到错误“字符‘i’处的字符串/字符文字中的词法错误”。

我已经尝试到处寻找解决此错误的方法,但到目前为止我还没有运气。

4

2 回答 2

6

要在中缀 for 中使用函数,请用反引号 (`) 将其括起来,而不是用单引号 (')。后者用于字符文字,它只有一个字符长。

于 2011-02-05T22:13:18.887 回答
2

反引号周围的div字符是不是普通引号?它们需要允许函数名称用作中缀运算符。我在你的定义中改变了它,代码对我有用。

于 2011-02-05T22:12:14.537 回答