Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 从Gen<;a>;到Gen<;列表>;在指定边界时? 模块生日库= 打字生日= {日期:int 月份:int} 模块DataGen= 让生日生成器(月份:选项)= 让monthGen=与月份匹配 |一些m->Gen.m元素 |无->FsCheck.Gen.choose(1,12) (乐趣m d->{day=d month=m}:BirthdayLibrary.Birthday) 蒙森 FsCheck.Gen.choose(1,28) //我要这个有签名 让一个永远的蒙特根= [对于[1..12]中的m]-> (有趣的任务->生日生成器(一些[任务])]_F#_Fscheck - Fatal编程技术网

F# 从Gen<;a>;到Gen<;列表>;在指定边界时? 模块生日库= 打字生日= {日期:int 月份:int} 模块DataGen= 让生日生成器(月份:选项)= 让monthGen=与月份匹配 |一些m->Gen.m元素 |无->FsCheck.Gen.choose(1,12) (乐趣m d->{day=d month=m}:BirthdayLibrary.Birthday) 蒙森 FsCheck.Gen.choose(1,28) //我要这个有签名 让一个永远的蒙特根= [对于[1..12]中的m]-> (有趣的任务->生日生成器(一些[任务])]

F# 从Gen<;a>;到Gen<;列表>;在指定边界时? 模块生日库= 打字生日= {日期:int 月份:int} 模块DataGen= 让生日生成器(月份:选项)= 让monthGen=与月份匹配 |一些m->Gen.m元素 |无->FsCheck.Gen.choose(1,12) (乐趣m d->{day=d month=m}:BirthdayLibrary.Birthday) 蒙森 FsCheck.Gen.choose(1,28) //我要这个有签名 让一个永远的蒙特根= [对于[1..12]中的m]-> (有趣的任务->生日生成器(一些[任务])],f#,fscheck,F#,Fscheck,假设我有类似上面的东西。我有一个返回类型为Gen的生日生成器。您可以选择指定月份。在为列表的Gen中的项指定某些约束时,从一个Gen转到另一个Gen的最佳方式是什么?我可以想出一些获取的方法,但我认为这对于构建一个应该包含a的父对象(这是本例的基础)是行不通的。我还可以想出一种方法来做Gen,我遇到了组合问题,列表中的所有值都是相同的。我看到Gen.arrayOf位,我想不出如何让它与数组中每个项目的值一起工作。模块BirthdayLibrary= module BirthdayLibrary

假设我有类似上面的东西。我有一个返回类型为Gen的生日生成器。您可以选择指定月份。在为列表的Gen中的项指定某些约束时,从一个Gen转到另一个Gen的最佳方式是什么?我可以想出一些获取的方法,但我认为这对于构建一个应该包含a的父对象(这是本例的基础)是行不通的。我还可以想出一种方法来做Gen,我遇到了组合问题,列表中的所有值都是相同的。我看到Gen.arrayOf位,我想不出如何让它与数组中每个项目的值一起工作。

模块BirthdayLibrary=
module BirthdayLibrary = 
    type Birthday =
        { day   :int
          month :int }

module DataGen = 
    let birthdayGenerator (months:option<list<int>>) = 
        let monthGen = match months with
                       | Some m -> Gen.elements m
                       | None   -> FsCheck.Gen.choose(1,12)
        (fun m d -> { day   = d
                      month = m}:BirthdayLibrary.Birthday)
        <!> monthGen
        <*> FsCheck.Gen.choose(1,28)

    //I want this to have the signature Gen<BirthdayLibrary.Birthday list>
    let oneForEveryMonthGen = 
        [ for m in [1 .. 12] ->
            (fun mo -> birthdayGenerator (Some [mo]))]
打字生日= {日期:int 月份:int} 模块DataGen= 让生日生成器(月份:选项)= 让monthGen=与月份匹配 |一些m->Gen.m元素 |无->FsCheck.Gen.choose(1,12) (乐趣m d->{day=d month=m}:BirthdayLibrary.Birthday) 蒙森 FsCheck.Gen.choose(1,28) //我要这个有签名 让一个永远的蒙特根= [对于[1..12]中的m]->生日生成器(一些[m])] |>基因序列 设sample=DataGen.oneForEveryMonthGen |>Gen.sample 10 1
给我:

val示例:BirthdayLibrary.birthdaylist=[{day=7; 月=1;};{日=15; 月=2;};{日=13; 月=3;};{日=14; 月=4;};{日=28; 月=5;}; {天=9天; 月=6;};{日=28; 月=7;};{日=15; 月=8;};{日=6; 月=9;};{日=21; 月=10;}; {天=12天; 月=11;};{日=27; 月份=12;}]]


我将添加一个答案,为您提供您想要的签名以及约束,但我必须承认,我不完全理解您对组合问题的理解。所谓组合问题,我的意思是我无法打开Gen以与具有类型属性的对象一起使用。
module BirthdayLibrary = 
    type Birthday =
        { day   :int
          month :int }

module DataGen = 
    let birthdayGenerator (months:option<list<int>>) = 
        let monthGen = match months with
                       | Some m -> Gen.elements m
                       | None   -> FsCheck.Gen.choose(1,12)
        (fun m d -> { day   = d
                      month = m}:BirthdayLibrary.Birthday)
        <!> monthGen
        <*> FsCheck.Gen.choose(1,28)

    //I want this to have the signature Gen<BirthdayLibrary.Birthday list>
    let oneForEveryMonthGen = 
        [ for m in [1 .. 12] -> birthdayGenerator (Some [m])]
        |> Gen.sequence

let sample = DataGen.oneForEveryMonthGen |> Gen.sample 10 1