gpt4 book ai didi

pattern-matching - 模式匹配中 `as` 的范围

转载 作者:行者123 更新时间:2023-12-05 09:30:29 25 4
gpt4 key购买 nike

给定一个从列表中删除连续重复项的函数

let rec compress l =
match l with
| [] -> []
| [x] -> [x]
| x :: (y :: _ as t) -> if x = y then compress t else x :: compress t;;

产生正确的结果

compress ["a"; "a";"b";"c";"c"] ;;
- : string list = ["a"; "b"; "c"]

但是如果我将 x::(y::_ as t) 更改为 x::(y::t),那么我会得到不正确的结果

compress ["a"; "a";"b";"c";"c"] ;;
- : string list = ["b"; "c"]

这是怎么回事?我无法理解声明 _ as t 如何改变函数的输出。直觉上,我认为它们是等效的语句(::_ as t::t),但看起来它们不是。

有人可以详细说明吗?

最佳答案

as 之后它们不等价尽可能向左延伸,所以在

x :: (y :: ys as t)

变量 t 绑定(bind)到 y::ys 而不仅仅是 ys

关于pattern-matching - 模式匹配中 `as` 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69546668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com