Unit-checked engineering formula objects built on LunarUnits.
moon add FrozenLemonTee/LunarFormulasimport {
"FrozenLemonTee/LunarFormulas/common",
"FrozenLemonTee/LunarFormulas/mechanics" @formula_mechanics,
"FrozenLemonTee/LunarUnits/core/dimension",
"FrozenLemonTee/LunarUnits/core/quantity",
"FrozenLemonTee/LunarUnits/units/si",
"FrozenLemonTee/LunarUnits/units/mechanics" @mechanical_units,
}let env = @common.FormulaEnv::new()
.with_input("mass", @quantity.Quantity::new(2.0, @si.kilogram))
.with_input(
"acceleration",
@quantity.Quantity::new(3.0, @si.meter / @si.second.pow(2)),
)
let force = @formula_mechanics.force_formula.eval(env)
// force.value() == 6.0
// force.unit().is_compatible(@mechanical_units.newton)let formula = @formula_mechanics.force_formula
let name = formula.name() // "force"
let display = formula.display() // "F = m * a"
let inputs = formula.inputs()let bad = @common.FormulaEnv::new()
.with_input("mass", @quantity.Quantity::new(2.0, @si.kilogram))
.with_input(
"acceleration",
@quantity.Quantity::new(3.0, @si.meter),
)
let result = @formula_mechanics.force_formula.checked_eval(bad)
// result is Nonelet mass = @common.input("mass", @dimension.Dimension::mass(), "Mass")
let acc = @common.input("acceleration", acceleration_dimension(), "Acceleration")
pub let force_formula : @common.Formula = @common.Formula::from_term(
"force",
mass * acc,
@mechanical_units.newton.dimension(),
"F = m * a",
"Computes force from mass and acceleration.",
)work = torque * anglecommon/
formula_expr.mbt FormulaEnv, FormulaExpr, FormulaError
formula.mbt FormulaInput and Formula
formula_term.mbt FormulaTerm DSL, input/constant/quantity, from_term
mechanics/
mechanics_formulas.mbt
examples/
examples.mbt runnable cookbook examples
docs/
architecture.md design boundaries and package structuremoon info
moon fmt
moon testInstall
Download zipUnit-checked engineering formula objects built on LunarUnits.