F#-从选项类型函数获取元组的fst元素

F#-从选项类型函数获取元组的fst元素,f#,tuples,option,F#,Tuples,Option,我试图访问元组的fst元素。通常我使用fst(tuple),但这种情况有点不同 let getCard (pl : player) : (card * player) option = let plDeck = pl match plDeck with | c1::re -> Some (c1,(re)) | [] -> None 这是我的f代码。播放器类型是一个int列表,输出是播放器列表的第一个int的元组,播放器列表减去第一个int 这是

我试图访问元组的fst元素。通常我使用fst(tuple),但这种情况有点不同

let getCard (pl : player) : (card * player) option =
    let plDeck = pl 
    match plDeck with
    | c1::re -> Some (c1,(re)) 
    | [] -> None 
这是我的f代码。播放器类型是一个
int
列表,输出是播放器列表的第一个
int
的元组,播放器列表减去第一个
int

这是我计算机科学课上的作业,所以要求我使用选项类型

我试图通过编写

let gc = fst (getCard [1,2,3])
但我似乎不能这样做,因为我得到了警告:

此表达式应具有类型 “a*”b“但这里有类型 “(卡*玩家)选项”


如何解决这个问题?

编译器告诉您正在尝试访问tuple card*player选项,而函数fst需要一个tuple card*player

您可以在getCard函数上进行模式匹配并提取卡

让结果=
将getCard[1..5]与
|一些卡片->fst(卡片)
|无->-1
您还可以使用模式匹配来提取元组的第一部分

让结果=
将getCard[1..5]与
|一些(卡片)->卡片
|无->-1
正如@Guran所建议的,你不应该返回幻数

让结果=
将getCard[1..5]与
|一些(卡片)->一些卡片
|无->无

getCard
返回一个选项,
fst
接收一个元组,因此不能将
getCard
的返回值传递给
fst
。考虑使用<代码> GC/<代码>也是一种选择。但是使用像“1”这样的“魔法值”是不好的形式。在这里使用选项作为返回值要好得多。ie
Some card
resp
None
true我假设op只是想要这个值。但是,考虑到这是一项旨在引入期权类型的任务,它当然也适合用于最终结果。谢谢,这是一个很好的解决方案!