#haskell
#haskell
Вопрос:
Я пытался выяснить, как я могу скрыть Char в Int в Haskell, используя функцию «ord» из данных.Библиотека символов. Вот до чего я добрался:
charToNum :: Char -> Int
charToNum x = (ord(x))
Это довольно простая программа, но я не уверен на 100%, как работать с функцией «ord»
Когда я запускаю компиляцию программы, все компилируется, но когда я пытаюсь ввести символ, я получаю эту ошибку:
> charToNum e
<interactive>:85:11: error: Variable not in scope: e :: Char
Комментарии:
1. Какое сообщение об ошибке вы получаете / как неожиданно ведет себя ваша программа?
2. Когда я пытаюсь его скомпилировать, он работает нормально, но после того, как я пытаюсь ввести символ, я получаю это сообщение об ошибке charToNum e <interactive>:85:11: ошибка: переменная не в области видимости: e :: Char
Ответ №1:
e
не является символом. Я имею в виду, что это, конечно, символ строки, которую вы ввели в приглашение, например c
, и N
являются символами этой строки, но что касается синтаксического анализатора, все они представляют собой только части имен переменных. И, ну, а затем GHCi сообщает вам, что именованной переменной нет e
.
Если вы хотите передать символ «e» в качестве аргумента, сделайте именно это!
> charToNum 'e'
Ответ №2:
charToNum 'e'
?
Кстати, ваше определение должно гласить
charToNum x = ord x
(Или просто
charToNum = ord
)
Комментарии:
1. Правильно, или даже просто
charToNum
вообще опустить определение и вместо этого вызватьord
напрямую.2. «Должен» — слишком сильное слово для использования здесь. Это другое определение было бы лучшим стилем, но в написанном определении нет ничего семантически неправильного.
3. @amalloy верно, но я согласен с bipll, что лишние круглые скобки, вообще говоря, следует опустить.