Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ocaml:获取介于两个字符之间的字符列表_Ocaml - Fatal编程技术网

Ocaml:获取介于两个字符之间的字符列表

Ocaml:获取介于两个字符之间的字符列表,ocaml,Ocaml,为了澄清我的困境,我将解释我面临的问题。。。 基本上,我正在被传递一个可以包含单个字符或字符范围的字符串,并试图返回由我传递的字符串表示的字符列表 例如,“b”会给出一个列表['b']“a-z”会给出['a';'b';'c';;'z'],而像“ad-g2-6”这样的东西会是['a';'d';'e';'f';'g';'2';'3';'4';'5';'6'],因为有字符a和范围d-g和2-6。(同样值得注意的是,像“a-”这样的东西只会是['a';'-'],因为这个范围还没有完成 我解决这个问题的想

为了澄清我的困境,我将解释我面临的问题。。。 基本上,我正在被传递一个可以包含单个字符或字符范围的字符串,并试图返回由我传递的字符串表示的字符列表

例如,“b”会给出一个列表['b']“a-z”会给出['a';'b';'c';;'z'],而像“ad-g2-6”这样的东西会是['a';'d';'e';'f';'g';'2';'3';'4';'5';'6'],因为有字符a和范围d-g和2-6。(同样值得注意的是,像“a-”这样的东西只会是['a';'-'],因为这个范围还没有完成

我解决这个问题的想法是将字符串分解成一个字符列表(lst),然后进行模式匹配并构建一个类似累加器的结构

let mainfunc str = let lst = (explode str) in
  let rec func lst acc = match lst with 
    | [] -> acc 
    | a::'-'::b::t -> func t (acc @ **SOMETHING TO GET THIS RANGE**)
    | a::t -> func t (acc @ [a])
  in func lst []
任何能帮助我在角色之间找到一个范围的东西都是很棒的,如果有人有比我设置的更好的方法来解决这个问题,我愿意接受这些想法


(还请注意,我的explode函数按预期工作,并将字符串转换为字符列表)

由于您编写了一个成功的
explode
函数,我假设您在递归等方面没有问题。因此,问题可能只是将字符作为值来讨论(这样您就可以获得给定字符后的下一个字符)

为此,您可以使用
Char.code
Char.chr
(来自OCaml标准库)

下面是一个函数,它接受一个字符并按顺序返回一个由该字符和下一个字符组成的列表:

let char_pair c =
    [ c; Char.chr (Char.code c + 1) ]
以下是运行时的外观:

# char_pair 'x';;
- : char list = ['x'; 'y']
(我将处理代码为255的字符的问题留作练习。)

顺便说一句,你的方法在我看来相当不错,看起来会奏效