Как я могу преобразовать Char в Int в Haskell, используя функцию «ord»?

#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, что лишние круглые скобки, вообще говоря, следует опустить.