gpt4 book ai didi

f# - F#中记录的模式匹配

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

有没有更惯用的方法来对记录进行模式匹配?我的代码似乎不对。

type Period = AM | PM

type TimeOfDay = {hours : int; minutes : int; p : Period}

let before (tod1 : TimeOfDay, tod2 : TimeOfDay) =
match tod1, tod2 with
| {hours = h1; minutes = m1; p = AM}, {hours = h2; minutes = m2; p = AM} -> (h1, m1) < (h2, m2)
| {hours = h1; minutes = m1; p = PM}, {hours = h2; minutes = m2; p = PM} -> (h1, m1) < (h2, m2)
| {hours = _; minutes = _; p = AM}, {hours = _; minutes = _; p = PM} -> true
| {hours = _; minutes = _; p = PM}, {hours = _; minutes = _; p = AM} -> false

最佳答案

您可以稍微改进一下,因为您不需要显示不需要的模式来生成以下内容

let before (tod1 : TimeOfDay, tod2 : TimeOfDay) =
match tod1, tod2 with
| {hours = h1; minutes = m1; p = AM}, {hours = h2; minutes = m2; p = AM} -> (h1, m1) < (h2, m2)
| {hours = h1; minutes = m1; p = PM}, {hours = h2; minutes = m2; p = PM} -> (h1, m1) < (h2, m2)
| { p = AM}, {p = PM} -> true
| { p = PM}, {p = AM} -> false

接下来,您可以定义一个 Active Pattern 来将类型解构为一个元组,如下所示
let (|TIME|) (t:TimeOfDay) = t.hours,t.minutes,t.p

let before (tod1 : TimeOfDay, tod2 : TimeOfDay) =
match tod1, tod2 with
| TIME(h1,m1,AM), TIME(h2,m2,PM) -> (h1, m1) < (h2, m2)
| TIME(h1,m1,PM), TIME(h2,m2,PM) -> (h1, m1) < (h2, m2)
| { p = AM}, {p = PM} -> true
| { p = PM}, {p = AM} -> false

关于f# - F#中记录的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19314461/

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