gpt4 book ai didi

loops - F# 类型和循环

转载 作者:行者123 更新时间:2023-12-04 17:10:59 25 4
gpt4 key购买 nike

我正在编写创建一副纸牌的 F# 教程。列出了类型,但我无法理解如何遍历类型以创建完整甲板的 map 。我希望做类似的事情

Foreach rank in ranks
Foreach suit in suits
somehow combine the two
next suit
next rank

没有办法做到这一点吗?下面是创建的类型。

我想如果我将它们从类型更改为列表,它们可以合并,对吗?那么,类型的重点是什么?
type suits=
|Spade=1
|Heart=2
|Club=3
|Diamond=4

type ranks=
|ValCard of int
|Jack
|Queen
|King

type deck= Deck of ranks * suits

最佳答案

一种替代方法,它使用有区别的联合,该联合的网格比使用 F# 语法的枚举更好

type suit=
|Spade
|Heart
|Club
|Diamond
static member all = [Spade;Heart;Club;Diamond]

type rank=
|ValCard of int
|Jack
|Queen
|King
static member all =([1..10]|> List.map (ValCard)) @ [Jack;Queen;King]

type card = |Card of rank * suit

let all_cards = suit.All |> List.collect (fun s -> rank.all |> List.map (fun r -> Card(r,s))

然后你可以做一些整洁的模式匹配,比如
all_cards 
|> List.iter (fun c ->
match c with
|Card(King,Spade) -> ...
|Card(King,_) -> ...
|Card(_) -> ...

您甚至可以定义一些事件模式来获得红/黑卡。

关于loops - F# 类型和循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13834396/

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