输入两个列表,使内容相互匹配

时间:2018-09-18 18:13:18

标签: ocaml cartesian-product

我正在尝试使用以下方法签名在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

然后,该函数应返回一个列表,其中每个西装都与所有可能的排名配对。我知道我需要使用模式匹配来做到这一点,但是我对如何使用感到非常困惑。

1 个答案:

答案 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);;