2011-02-05 25 views
5

Haskell programlamada oldukça yeniyim ve bu hatayı kodumda neden aldığımı anlamakta zorlanıyorum. aşağıdaki gibiHaskell: "i" karakterinde dize/karakter değişkeni içinde kelime hatası hatası

Benim sorun i ifade edilebilir herhangi bir pozitif tam sayı k 2 kez tek bir sayısının bir güç olarak, yani tek i = 2^n * k gibi. Biz 2'nin üssü olarak adlandırıyoruz. Örneğin, 40'ta 2'nin üssü 3'tür (çünkü 40 = 2^3 * 5), 42'de 2'nin üssü 1'dir. Eğer kendisinin tek olması durumunda, n sıfırdır. Öte yandan, ben bile, bu 2 ile bölünebilir anlamına gelir ise, argümanında 2 üssü nding için bir fonksiyon exponentOfTwo yazın.

Ben psuedocode anlamak ve oldukça basit görünüyor: yinelemeli 2 ile i bölmek sonuç garip kadar bölünme olur sayısıdır burada n

benim kod (satır 31-32) 'dir:

hatasını alıyorum
exponentOfTwo :: Int -> Int 
exponentOfTwo i = if odd i then 0 else 1 + exponentOfTwo (i 'div' 2) 

"dizesinde sözcük hata/karakterde sabit karakter 'i'" satırındaki 32 sütun üzerinde 62.

her yerde ve şimdiye kadar bu hataya bir çözüm ararken denedim Hiç şansım olmadı.

cevap

6

Infix'te bir işlevi kullanmak için, onu tek tırnak işareti (') ile değil, backticks (`) ile çevreleyin. İkincisi, sadece bir karakter uzunluğunda olan karakter editörleri içindir.

2

Karakterler normal tırnaklardan ziyade div backquotes etrafında mı? Bir infix operatörü olarak fonksiyon isminin kullanılmasına izin vermek zorundadırlar. Tanımınızda ve kodun benim için çalıştığını değiştirdim.

+0

Oh, bu kolay bir düzeltme oldu, şimdi aptal hissediyorum. Bunun böyle olması gerektiğini hiç bilmiyordum. Çok teşekkür ederim! – Gus

İlgili konular