feat: add a few more simple functions to Danger namespace
This commit is contained in:
parent
3106a10b90
commit
803231d620
|
@ -4,6 +4,22 @@ open FunctionRegistry_Helpers
|
||||||
let nameSpace = "Danger"
|
let nameSpace = "Danger"
|
||||||
let requiresNamespace = true
|
let requiresNamespace = true
|
||||||
|
|
||||||
|
module NumberToNumber = {
|
||||||
|
let make = (name, fn) =>
|
||||||
|
FnDefinition.make(
|
||||||
|
~name,
|
||||||
|
~inputs=[FRTypeNumber],
|
||||||
|
~run=(_, inputs, _, _) => {
|
||||||
|
inputs
|
||||||
|
->getOrError(0)
|
||||||
|
->E.R.bind(Prepare.oneNumber)
|
||||||
|
->E.R2.fmap(fn)
|
||||||
|
->E.R2.fmap(Wrappers.evNumber)
|
||||||
|
},
|
||||||
|
(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
module TwoNumbersToNumber = {
|
module TwoNumbersToNumber = {
|
||||||
let make = (name, fn) =>
|
let make = (name, fn) =>
|
||||||
FnDefinition.make(
|
FnDefinition.make(
|
||||||
|
@ -28,18 +44,52 @@ module ThreeNumbersToNumber = {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module Internals = {
|
||||||
|
let factorial = Stdlib.Math.factorial
|
||||||
|
let choose = ((n, k)) => factorial(n) /. (factorial(n -. k) *. factorial(k))
|
||||||
|
let pow = (base, exp) => Js.Math.pow_float(~base, ~exp)
|
||||||
|
let binomial = ((n, k, p)) => choose((n, k)) *. pow(p, k) *. pow(1.0 -. p, n -. k)
|
||||||
|
}
|
||||||
|
|
||||||
let library = [
|
let library = [
|
||||||
Function.make(
|
Function.make(
|
||||||
~name="laplace",
|
~name="laplace",
|
||||||
~nameSpace,
|
~nameSpace,
|
||||||
~requiresNamespace,
|
~requiresNamespace,
|
||||||
~output=EvtNumber,
|
~output=EvtNumber,
|
||||||
~examples=[`laplace(1, 20)`],
|
~examples=[`Danger.laplace(1, 20)`],
|
||||||
~definitions=[
|
~definitions=[
|
||||||
TwoNumbersToNumber.make("laplace", ((successes, trials)) =>
|
TwoNumbersToNumber.make("laplace", ((successes, trials)) =>
|
||||||
(successes +. 1.0) /. (trials +. 1.0)
|
(successes +. 1.0) /. (trials +. 2.0)
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
(),
|
(),
|
||||||
),
|
),
|
||||||
|
Function.make(
|
||||||
|
~name="factorial",
|
||||||
|
~nameSpace,
|
||||||
|
~requiresNamespace,
|
||||||
|
~output=EvtNumber,
|
||||||
|
~examples=[`Danger.factorial(20)`],
|
||||||
|
~definitions=[NumberToNumber.make("factorial", Internals.factorial)],
|
||||||
|
(),
|
||||||
|
),
|
||||||
|
Function.make(
|
||||||
|
~name="choose",
|
||||||
|
~nameSpace,
|
||||||
|
~requiresNamespace,
|
||||||
|
~output=EvtNumber,
|
||||||
|
~examples=[`Danger.choose(1, 20)`],
|
||||||
|
~definitions=[TwoNumbersToNumber.make("choose", Internals.choose)],
|
||||||
|
(),
|
||||||
|
),
|
||||||
|
Function.make(
|
||||||
|
~name="binomial",
|
||||||
|
~nameSpace,
|
||||||
|
~requiresNamespace,
|
||||||
|
~output=EvtNumber,
|
||||||
|
~examples=[`Danger.binomial(1, 20, 0.5)`],
|
||||||
|
~definitions=[ThreeNumbersToNumber.make("binomial", Internals.binomial)],
|
||||||
|
(),
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -47,3 +47,7 @@ module Random = {
|
||||||
@module external sample: (array<float>, sampleArgs) => array<float> = "@stdlib/random/sample"
|
@module external sample: (array<float>, sampleArgs) => array<float> = "@stdlib/random/sample"
|
||||||
let sample = sample
|
let sample = sample
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module Math = {
|
||||||
|
@module external factorial: float => float = "@stdlib/math/base/special/factorial"
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user