Haskell: лексическая ошибка в строковом / символьном литерале в символе 'i'

Я довольно новичок в программировании на Haskell, и мне трудно понять, почему я получаю эту ошибку в своем коде.

Моя проблема заключается в следующем: любое положительное целое число i может быть выражено как i = 2^n*k, где k нечетное, то есть как степень, в 2 раза превышающая нечетное число. Мы называем показатель степени 2 в i. Например, показатель степени 2 в 40 равен 3 (потому что 40 = 2^3*5), тогда как показатель степени 2 в 42 равен 1. Если i само нечетно, то n равно нулю. Если, с другой стороны, i четное, это означает, что его можно разделить на 2. Напишите функцию exponentOfTwo для поиска показателя степени 2 в его аргументе.

Я понимаю psuedocode, и он кажется довольно простым: рекурсивно разделить i на 2, пока результат не станет нечетным, число раз, когда деление происходит, равно n

вот мой код (строка 31-32):

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

Я получаю сообщение об ошибке "Лексическая ошибка в строковом / символьном литерале в символе" i "" в строке 32 столбца 62.

Я пытался найти решение этой ошибки везде, и пока мне не повезло.

2 ответа

Решение

Чтобы использовать функцию в infix для, окружите ее обратными чертами (`), а не одинарными кавычками ('). Последние предназначены для литералов символов, которые, как правило, имеют длину только один символ.

Персонажи вокруг div обратные кавычки, а не нормальные кавычки? Они должны позволять использовать имя функции в качестве инфиксного оператора. Я изменил это в вашем определении, и код работал для меня.

Другие вопросы по тегам