У меня есть функция для генерации двойников в диапазоне:
let gen_doublein =
fun mx mn -> Arb.generate<float> |> Gen.suchThat ( (>) mx ) |> Gen.suchThat ( (<) mn )
а затем функция для создания массива из 2 из них:
let gen_params:Gen<double array> =
gen { let! x = gen_doublein 0.0 20000.0
let! y = gen_doublein 0.0 2000.0
return [| x;y|] }
Я кладу:
static member arb_params = Arb.fromGen gen_params
в классе Generator и зарегистрируйте его. Все кажется в порядке. Чтобы проверить, что все в порядке, у меня есть:
let f2 (xs:double array) :double= exp (-2.0*xs.[0]) + xs.[1]*exp (-2.0*xs.[0])
let fcheck fn xs = fn xs > 0.0
затем с помощью генератора массива 'arrayOfLength':
Check.Quick (Prop.forAll (arrayOfLength 2) (fcheck f2))
однако работает так, как ожидалось:
Check.Quick (Prop.forAll (Generators.arb_params) (fcheck f2))
просто начинает делать какие-то вычисления и никогда не возвращается. гуру f# помогите.
fun mx mn
обязательно вызовет сюрпризы в будущем :) - person Brian   schedule 20.03.2012