5

私は Haskell プログラミングにかなり慣れていないため、コードでこのエラーが発生する理由を理解するのに苦労しています。

私の問題は次のとおりです。任意の正の整数 i は、i = 2^n*k として表すことができます。ここで、k は奇数、つまり奇数の 2 乗です。n を i における 2 の指数と呼びます。たとえば、40 の 2 の指数は 3 (40 = 2^3*5 であるため) ですが、42 の 2 の指数は 1 です。i 自体が奇数の場合、n はゼロです。一方、i が偶数の場合、それは 2 で割り切れることを意味します。2 の指数を求める関数 exponentOfTwo を引数に記述します。

私は疑似コードを理解しており、かなり単純に思えます。結果が奇数になるまで 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

中置で関数を使用するには、一重引用符(')ではなく、バッククォート( `)で囲みます。後者は文字リテラル用であり、1文字の長さです。

于 2011-02-05T22:13:18.887 に答える
2

div通常の引用符ではなく、バッククォートの周りの文字はありますか?関数名を中置演算子として使用できるようにする必要があります。私はあなたの定義でそれを変更しました、そしてコードは私のために働きました。

于 2011-02-05T22:12:14.537 に答える