gpt4 book ai didi

f# - 排列生成器函数 F#

转载 作者:行者123 更新时间:2023-12-02 17:22:08 27 4
gpt4 key购买 nike

我需要生成 1..n x 1..n 的所有不同排列的列表,其中第一个值不等于第二个值(即生成 3 -> [(3,2)::(3,1)::(2,3)::(2,1)::(1,3)::(1,2)]

确切的场景是你有一堆物体(卡牌),每个玩家都会发一张。如果一个玩家被发了一张牌,那么其他玩家就不能发这张牌(暂时忽略花色,如果必须的话我会做一个 1-52 的 lut 来映射到实际的牌)

我想出了以下内容,充其量看起来很困惑

 let  GenerateTuples (numcards: int) =
let rec cellmaker (cardsleft: int) (cardval:int) =
if cardval = cardsleft then (if cardval <= 0 then [] else cellmaker cardsleft (cardval-1) ) elif cardval <= 0 then [] else (cardsleft, cardval) :: cellmaker cardsleft (cardval-1)
let rec generatelists (cardsleft:int) =
cellmaker cardsleft numcards @ (if cardsleft > 1 then generatelists (cardsleft-1) else [])
generatelists numcards

有更好的方法吗?

最佳答案

您可以使用列表推导式轻松完成此操作:

let GenerateTuples (n:int) =
[for i in 1..n do for j in 1..n do if i <> j then yield (i,j)]

关于f# - 排列生成器函数 F#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3689097/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com