Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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,我正在研究“99 Ocaml问题”,在解决方案中,我看到了以下模式匹配: let rec compress (mylist : 'a list) : 'a list = match mylist with |a::(b::_ as t) -> if a = b then compress t else a::compress t |smaller -> smaller 我理解,对于第一个匹配的情况,如果元素a与元素b相同,那么我将转到列表t。如果不是,我将把元素a附加到压缩

我正在研究“99 Ocaml问题”,在解决方案中,我看到了以下模式匹配:

let rec compress (mylist : 'a list) : 'a list = match mylist with
  |a::(b::_ as t) -> if a = b then compress t else a::compress t
  |smaller -> smaller
我理解,对于第一个匹配的情况,如果元素a与元素b相同,那么我将转到列表t。如果不是,我将把元素a附加到压缩t的列表中

对于第二个匹配案例,我不确定“较小”的类型是什么

当我试图在它周围放一个方括号时,因为我认为作者想用一个元素列表匹配第二个案例,但我有一个非穷举模式


你能给我解释一下在这种情况下“较小”是什么吗?

变量
较小
是一个
'a列表。它匹配与早期分支不匹配的任何内容,即带有一个元素的列表或空列表。

编写
压缩
函数而不使用
较小值的另一种方法:

   let rec compress (mylist : 'a list) : 'a list = match mylist with
    | a::(b::_ as t) -> if a = b then compress t else a::compress t
    | _ -> mylist;;
这与用户tbrk的回答相同:如果
mylist
与第一个表达式不匹配,则
compress mylist
返回
mylist