Struct arithmetic_eval::fns::While
source · pub struct While;
Expand description
Loop function that evaluates the provided closure while a certain condition is true. Returns the loop state afterwards.
Type
(using arithmetic-typing
notation)
('T, ('T) -> Bool, ('T) -> 'T) -> 'T
Examples
let program = "
factorial = |x| {
(_, acc) = while(
(x, 1),
|(i, _)| i >= 1,
|(i, acc)| (i - 1, acc * i),
);
acc
};
factorial(5) == 120 && factorial(10) == 3628800
";
let program = Untyped::<F32Grammar>::parse_statements(program)?;
let module = ExecutableModule::new("test_while", &program)?;
let mut env = Environment::new();
env.insert_native_fn("while", fns::While);
assert_eq!(module.with_env(&env)?.run()?, Value::Bool(true));
Trait Implementations§
source§impl<T: 'static + Clone> NativeFn<T> for While
impl<T: 'static + Clone> NativeFn<T> for While
source§fn evaluate(
&self,
args: Vec<SpannedValue<T>>,
ctx: &mut CallContext<'_, T>
) -> EvalResult<T>
fn evaluate( &self, args: Vec<SpannedValue<T>>, ctx: &mut CallContext<'_, T> ) -> EvalResult<T>
Executes the function on the specified arguments.
impl Copy for While
Auto Trait Implementations§
impl RefUnwindSafe for While
impl Send for While
impl Sync for While
impl Unpin for While
impl UnwindSafe for While
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more