首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将列表传递给函数?

如何将列表传递给函数?
EN

Stack Overflow用户
提问于 2019-05-20 00:18:42
回答 2查看 56关注 0票数 0

我正在尝试创建一个函数,它接受一个卡片列表,并返回一个不包含特定卡片的列表。如何将已定义类型的列表传递给函数?

我向函数传递了一个列表,它指出我的类型不匹配。

代码语言:javascript
复制
type Suit = Clubs | Diamonds | Hearts | Spades
type Rank = Jack | Queen | King | Ace | Num of int
type Card = Rank * Suit
type Color = Red | Black
type Move = Discard of Card | Draw


let cards = [(Jack,Clubs); (Num(8),Spades)]
let c:Card = Jack, Clubs

let remove_card (cs, c:Card, e:string) = 
  cs
remove_card cards c "Err"

调用函数remove_card时应返回正确的list。但是,抛出了错误:

此表达式的类型应为'('a -> 'b -> 'c) * Card * string‘,但此处的类型为'(Rank * Suit) list’

EN

回答 2

Stack Overflow用户

发布于 2019-05-20 01:08:10

这是因为您已经将remove_card函数定义为一个接受单个元组参数并返回值的函数,但是您调用它时就像一个接受三个参数的函数一样。要按照现在定义的方式调用remove_card,需要像调用remove_card (cards, card, "Err")一样调用它,创建三参数元组并使用它调用函数。我想你可能想做的是:

代码语言:javascript
复制
let remove_card cardList cardToRemove err = 
  cardList

remove_card cards c "Err"

即创建一个具有三个参数的函数,而不是一个元组参数。

票数 3
EN

Stack Overflow用户

发布于 2019-05-20 01:16:21

F#中的参数语法与其他常见语言有很大不同。

您的函数-尽管看起来有3个参数-实际上只有一个参数,即3个组件的元组。

所以你必须把它叫做remove_card (cards, c, "Err")

然而,在惯用F#中,如果没有特殊要求,我们通常不使用元组作为参数。相反,我们在需要时使用单独的参数来利用partial application

代码语言:javascript
复制
let remove_card cs (c:Card) (e:string) = ...
let remove_card_withFixedCards = remove_card cards
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56209723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档