2011-02-05 15 views
5

Sono abbastanza nuovo per la programmazione Haskell e ho difficoltà a capire perché sto ricevendo questo errore nel mio codice.Haskell: errore lessicale in stringa/carattere letterale al carattere 'i'

Il mio problema è il seguente: Qualsiasi intero positivo i può essere espresso come i = 2^n * k, dove k è dispari, cioè come potenza di 2 volte un numero dispari. Chiamiamo n l'esponente di 2 in i. Ad esempio, l'esponente di 2 in 40 è 3 (perché 40 = 2^3 * 5) mentre l'esponente di 2 in 42 è 1. Se io stesso è dispari, allora n è zero. Se, d'altra parte, io sono pari, ciò significa che può essere diviso per 2. Scrivi una funzione exponentOfTwo per trovare l'esponente di 2 nel suo argomento.

Capisco il psuedocodarlo e sembra abbastanza semplice: ricorsivamente i dividere per 2 fino risultato è dispari, il numero di volte che la divisione accade è n

ecco mio codice (linea 31-32):

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

sto ricevendo l'errore "errore lessicale nella stringa/carattere letterale al carattere 'i'" on line 32 della colonna 62.

ho provato a cercare una soluzione a questo errore in tutto il mondo e finora Non ho avuto fortuna

risposta

6

Per utilizzare una funzione in infisso per, circondarla di apici inversi (`), non con virgolette singole ('). Questi ultimi sono per caratteri letterali, che, beh, sono lunghi solo un personaggio.

2

I caratteri intorno alle virgolette div anziché alle virgolette normali? Devono essere per consentire il nome di una funzione da utilizzare come operatore infisso. L'ho cambiato nella tua definizione e il codice ha funzionato per me.

+0

Oh wow quella era una soluzione semplice, mi sento un po 'stupida ora. Non ho mai saputo che doveva essere così. Grazie mille! – Gus