2015-10-02 10 views
0

Как часть экзамена SML практики, мне было предложено написать функцию, которая проверяет, является ли символ «c» цифрой или нет.Проверка, является ли символ цифрой

Я искал функцию Char.ord, но он возвращает код ASCII, а не целое число в символе, и я не могу проверить тип.

Я осмотрел его, чтобы использовать datatype wrapper, но при реализации этого в функцию; я не получил желаемого результата.

Спасибо :)

ответ

2

Вы можете сравнить полученный код ASCII. Если это цифра, это будет между диапазоном значений (48 - 57, я думаю). Проверьте номер, который вы получите, с кодом номера в таблице.

Ниже приведен пример функции:

fun check x = (ord x > 47) andalso (ord x < 58); 
2

Вы можете использовать операторы сравнения:

fun is_digit c = #"0" <= c andalso c <= #"9"; 

На редактирования: Я не 100% уверен, что вы имели в виду, используя datatype wrapper, но вы также можете сделать следующее. Преобразуйте char в строку, используя str, а затем используйте Int.fromString, чтобы попытаться преобразовать в int. Это возвращает int option. Затем вы можете использовать сопоставление образцов по возвращаемому значению:

fun is_digit c = 
    case Int.fromString (str c) of 
     NONE => false 
     | _ =>true; 
Смежные вопросы