Unit-checked engineering formula objects built on LunarUnits.
Dependencies
moon add FrozenLemonTee/LunarFormulasimport {
"FrozenLemonTee/LunarFormulas/common",
"FrozenLemonTee/LunarFormulas/catalog" @formula_catalog,
"FrozenLemonTee/LunarFormulas/mechanics" @formula_mechanics,
"FrozenLemonTee/LunarFormulas/electrical" @formula_electrical,
"FrozenLemonTee/LunarFormulas/thermal" @formula_thermal,
"FrozenLemonTee/LunarUnits/core/dimension",
"FrozenLemonTee/LunarUnits/core/quantity",
"FrozenLemonTee/LunarUnits/units/si",
"FrozenLemonTee/LunarUnits/units/mechanics" @mechanical_units,
"FrozenLemonTee/LunarUnits/units/electromagnetism" @electrical_units,
"FrozenLemonTee/LunarUnits/quantities/qelectromagnetism",
}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 power = @formula_mechanics.force * @formula_mechanics.velocity
// power.dimension().is_same(@mechanical_units.watt.dimension())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())
let acc = @common.input("acceleration", acceleration_dimension())
// `force` is a Formula; its dimension is inferred from `mass * acc`.
pub let force : @common.Formula = mass * accwork = torque * anglecommon/
formula_expr.mbt FormulaExpr, FormulaEnv, FormulaError
formula.mbt FormulaInput and the Formula value, input/constant/quantity
mechanics/
mechanics_formulas.mbt input variables and the formulas composed from them
electrical/
electrical_formulas.mbt electrical variables and formulas
thermal/
thermal_formulas.mbt thermal variables and formulas
catalog/
catalog.mbt FormulaEntry metadata and preset catalogs
examples/
examples.mbt runnable cookbook examples
docs/
architecture.md design boundaries and package structuremoon info
moon fmt
moon testlet entry = @formula_catalog.all().lookup("ohm-voltage").unwrap()
let env = @common.FormulaEnv::new()
.with_input("current", @quantity.Quantity::new(2.0, @si.ampere))
.with_input("resistance", @qelectromagnetism.ohms(5.0))
let voltage = entry.eval(env)
// voltage.to(@electrical_units.volt).value() == 10.0Unit-checked engineering formula objects built on LunarUnits.
Dependencies