消除ocaml中列表元素的连续重复项
我正在研究“99 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附加到压缩
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