我正在尝试使用以下方法签名在OCaml中创建一个函数:
let generate_deck (suits : suit list) (ranks : rank list) : card list =
服装,等级和卡片的定义如下:
type suit = Clubs | Spades | Hearts | Diamonds
type rank = Six | Seven | Eight | Nine | Ten |
Jack | Queen | King | Ace
type card = rank * suit
然后,该函数应返回一个列表,其中每个西装都与所有可能的排名配对。我知道我需要使用模式匹配来做到这一点,但是我对如何使用感到非常困惑。
答案 0 :(得分:1)
首先,编写一个函数rank list -> suit -> card list
来生成一套完整的西装,然后map
在所有西装上都concat
。
type suit = Clubs | Spades | Hearts | Diamonds
type rank = Six | Seven | Eight | Nine | Ten |
Jack | Queen | King | Ace
type card = rank * suit
let generate_suit ranks suit =
List.map (fun rank -> suit, rank) ranks;;
let generate_deck suits ranks =
List.concat (List.map (generate_suit ranks) suits);;