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 Freeze for While
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
source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)