gpt4 book ai didi

F# 模式匹配嵌套可区分联合

转载 作者:行者123 更新时间:2023-12-03 18:25:29 26 4
gpt4 key购买 nike

我有一个嵌套的歧视联合代表一副扑克牌:

type Symbol =
| Seven
| Eight
| Nine
| Ten
| Jack
| Queen
| King
| Ace

type Card =
| Heart of Symbol
| Diamond of Symbol
| Spade of Symbol
| Club of Symbol

现在我想写一个函数返回给定卡片的值,在我的例子中它与卡片花色无关:
let GetValue (card : Card) =
match card with
| Heart(Seven) -> 0
| Diamond(Seven) -> 0
| Spade(Seven) -> 0
| Club(Seven) -> 0
...

这显然写起来很乏味。有没有办法做这样的事情
let GetValue (card : Card) =
match card with
| _(Seven) | _(Eight) | _(Nine) -> 0
| _(Ten) -> 10
...

非常感谢。

最佳答案

您对数据的建模不正确。由于总套牌是西装和等级的完整笛卡尔乘积,因此将等级“包裹”在西装中是没有意义的。两者应该是独立的,同样重要的卡片属性:

type Rank =
| Seven
| Eight
| Nine
| Ten
| Jack
| Queen
| King
| Ace

type Suit =
| Heart
| Diamond
| Spade
| Club

type Card = { suit: Suit; rank: Rank }

let getValue (card:Card) =
match card.rank with
| Seven | Eight | Nine -> 0
| Ten -> 10
...

关于F# 模式匹配嵌套可区分联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45887301/

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