Pregunta

Soy bastante nuevo en la programación de Haskell y tengo problemas para entender por qué recibo este error en mi código.

Mi problema es el siguiente: cualquier entero positivo que pueda expresarse como i = 2^n*k, donde k es impar, es decir, como un poder de 2 veces un número impar. Llamamos a n el exponente de 2 en i. Por ejemplo, el exponente de 2 en 40 es 3 (porque 40 = 2^3*5) mientras que el exponente de 2 en 42 es 1. Si I es impar, entonces n es cero. Si, por otro lado, yo es pareja, eso significa que puede dividirse por 2. Escriba una función exponenteftwo para encontrar el exponente de 2 en su argumento.

Entiendo el psuidocódigo y parece bastante simple: dividir recursivamente i por 2 hasta que el resultado sea impar, el número de veces que ocurre la división es n

Aquí está mi código (línea 31-32):

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

Estoy recibiendo el error "Error léxico en String/Caracter Literal en el personaje 'I'" en la línea 32 Columna 62.

He intentado buscar una solución a este error en todas partes y hasta ahora no he tenido suerte.

¿Fue útil?

Solución

Para usar una función en Infix para, rodeándola con backticks (`), no con citas individuales ('). Estos últimos son para literales de caracteres, que, bueno, son solo un personaje largo.

Otros consejos

¿Están los personajes? div ¿Backquotes en lugar de citas normales? Deben ser para permitir que un nombre de función se use como operador Infix. Lo cambié en su definición y el código funcionó para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top