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
обратные кавычки, а не нормальные кавычки? Они должны позволять использовать имя функции в качестве инфиксного оператора. Я изменил это в вашем определении, и код работал для меня.