gpt4 book ai didi

f# - 使用 cons 运算符理解模式匹配

转载 作者:行者123 更新时间:2023-12-04 01:35:45 25 4
gpt4 key购买 nike

在“Programming F#”中,我遇到了这样的模式匹配(我简化了一点):

let rec len list = 
match list with
| [] -> 0
| [_] -> 1
| head :: tail -> 1 + len tail;;

实际上,我知道最后一场比赛可以识别列表的头部和尾部。从概念上讲,我不明白它为什么起作用。据我了解,::是 cons 运算符,它在列表的头部位置附加一个值,但在我看来它不像在这里被用作运算符。我应该将其理解为列表的“特殊语法”,其中::被解释为运算符或“匹配模式”,具体取决于上下文?或者是否可以使用其他运算符将相同的想法扩展到列表以外的类型?

最佳答案

除了Brian的回答,还有几点值得注意。 h::t语法既可以用作运算符,也可以用作模式:

let l = 1::2::[]                    // As an operator
match l with x::xs -> 1 | [] -> 0 // As a pattern

这意味着它有点特殊,因为其他运算符(例如 + )不能用作模式(用于将结果分解回运算符的参数) - 显然,对于 + ,这将是模棱两可的。

此外,模式 [_]很有趣,因为它是嵌套模式的一个例子。它组成:
  • _ - 下划线模式,匹配任何值,不绑定(bind)任何符号
  • [ <pattern> ] - 单元素列表模式,匹配具有单个元素的列表并将列表的元素与嵌套的 <pattern> 匹配.

  • 你也可以写 match 1::[] with | [x] -> x这将返回单个元素的值(在本例中为 1)。

    关于f# - 使用 cons 运算符理解模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2846586/

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