首页 > 解决方案 > 输入两个列表,内容相互匹配

问题描述

我正在尝试使用此方法签名在 OCaml 中创建一个函数:

let generate_deck (suits : suit list) (ranks : rank list) : card list = 

Suit、Rank 和 Card 定义如下:

type suit = Clubs | Spades | Hearts | Diamonds

type rank =  Six | Seven | Eight | Nine | Ten |
             Jack | Queen | King | Ace

type card = rank * suit

然后该函数应返回一个列表,其中每个套装与所有可能的等级配对。我知道我需要使用模式匹配来做到这一点,但我真的很困惑如何做到这一点。

标签: ocamlcartesian-product

解决方案


首先,编写一个函数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);;

推荐阅读