OCaml在C / C ++中是否有类似isdigit和isalpha的模块?

时间:2018-03-08 23:12:27

标签: module pattern-matching ocaml

我一直在教自己OCaml并且一直试图查看Pervasives模块和其他模块,找到一个包含类似C / C ++函数的函数的模块isdigitisalpha尝试清理我的代码。

正如我检查一封信的条件陈述之一所示:

if token > 64 && token < 91 || token > 96 && token < 123 then (* Do something * )

OCaml是否有一个等同于isdigitisalpha的模块?

2 个答案:

答案 0 :(得分:11)

一种解决方案是在字符范围内使用模式匹配:

let is_alpha = function 'a' .. 'z' | 'A' .. 'Z' -> true | _ -> false
let is_digit = function '0' .. '9' -> true | _ -> false

答案 1 :(得分:1)

使用@octachron使用模式匹配的解决方案我能够创建自己的isalphaisdigit函数来清理我的代码。

解决方案代码:

(* A function that will validate if the input is a ALPHA *)
let is_alpha alpha = 
    match alpha with 
      'a' .. 'z' -> true
    | 'A' .. 'Z' -> true 
    | _ -> false;;

(* A function that will validate if the input is a DIGIT *)
let is_digit digit =
    match digit with
     '0' .. '9' -> true
    | _ -> false;; 

let get_token token =
         if (is_alpha (char_of_int token)) = true 
             then    (* Checking if a APLHA was found *)
                begin
                    Printf.printf("Valid Token Alpha found: %c\n") (char_of_int token);
                end
         else (is_digit (char_of_int token)) = true 
               then    (* Checking if a Digit was found*)
                  begin
                       Printf.printf("Valid Token Digit found: %c\n") (char_of_int token);
                  end
         else
            begin
                Printf.printf("Invalid Token found: %c\n") (char_of_int token);
            end
;;

感谢您帮助我找到解决方案@octachron。