मुझे यह पता लगाने में परेशानी हो रही है कि gen वर्कफ़्लो सिंटैक्स का उपयोग किए बिना fscheck जनरेटर कैसे बनाएं और मान लें कि इसे करने का एक अच्छा तरीका होना चाहिए। मैं एक नेस्टेड Gen<Gen<... के साथ समाप्त होता हूं और एक चपटा संस्करण चाहता हूं। option के साथ मैं नेस्टिंग को खत्म करने के लिए Option.bind का उपयोग करूंगा। seq के साथ मैं SelectMany का उपयोग करूंगा। लेकिन मुझे नहीं लगता कि उस तरह की विधि Gen मॉड्यूल में दिखाई देती है।

// return a Gen<char list> as expected
// first makes a random number from 5 to 8
// and then creates a random list of characters that long
let randomListLengths =
    gen {
        let! len = Gen.choose(5,8)
        let! item = Gen.elements ['a';'b';'c'] |> Gen.listOfLength len
        return item
    }

// return a Gen<Gen<char list>>
let anotherWayThatDoesNotWork =
    Gen.choose(5, 8)
    |> Gen.map (fun len -> Gen.elements['a';'b';'c'] |> Gen.listOfLength len)
4
JustinM 12 सितंबर 2020, 06:28

1 उत्तर

सबसे बढ़िया उत्तर

आप >>= ऑपरेटर का उपयोग कर सकते हैं:

let randomListLengths =
    Gen.choose(5,8)
    >>= (fun len -> Gen.elements ['a';'b';'c'] |> Gen.listOfLength len)
3
Kurt Schelfthout 12 सितंबर 2020, 22:54