mirror of
https://github.com/Dummi26/mers.git
synced 2025-03-10 14:13:52 +01:00
Add division to examples/03 and add any
and all
functions for Iter<Bool>
This commit is contained in:
parent
39fca08541
commit
d2fc8c1ebe
@ -1,6 +1,6 @@
|
|||||||
"- Calculator -".println
|
"- Calculator -".println
|
||||||
"Type =<num> to set the value to that number.".println
|
"Type =<num> to set the value to that number.".println
|
||||||
"Type +<num>, -<num> or *<num> to change the value.".println
|
"Type +<num>, -<num>, *<num> or /<num> to change the value.".println
|
||||||
"Type exit to exit.".println
|
"Type exit to exit.".println
|
||||||
|
|
||||||
current := 0.0
|
current := 0.0
|
||||||
@ -19,9 +19,11 @@ current := 0.0
|
|||||||
¤t = (current, (num, -1).product).sum
|
¤t = (current, (num, -1).product).sum
|
||||||
} else if mode.eq("*") {
|
} else if mode.eq("*") {
|
||||||
¤t = (current, num).product
|
¤t = (current, num).product
|
||||||
|
} else if mode.eq("/") {
|
||||||
|
¤t = (current, num).div
|
||||||
} else if mode.eq("=") {
|
} else if mode.eq("=") {
|
||||||
¤t = num
|
¤t = num
|
||||||
} else if input.eq("exit") {
|
} else if (input.eq("exit"), input.eq("")).any {
|
||||||
(())
|
(())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -26,8 +26,17 @@ impl Config {
|
|||||||
/// `map_while: fn` maps while the map-function returns (d), ends the iterator once () is returned.
|
/// `map_while: fn` maps while the map-function returns (d), ends the iterator once () is returned.
|
||||||
/// `take: fn` takes at most so many elements from the iterator.
|
/// `take: fn` takes at most so many elements from the iterator.
|
||||||
/// `enumerate: fn` transforms an iterator over T into one over (Int, T), where Int is the index of the element
|
/// `enumerate: fn` transforms an iterator over T into one over (Int, T), where Int is the index of the element
|
||||||
|
/// `any: fn` returns true if any element of the iterator are true
|
||||||
|
/// `all: fn` returns true if all elements of the iterator are true
|
||||||
pub fn with_iters(self) -> Self {
|
pub fn with_iters(self) -> Self {
|
||||||
self.add_var(
|
self
|
||||||
|
.add_var("any".to_string(), Data::new(genfunc_iter_in_val_out("all".to_string(), data::bool::BoolT, Type::new(data::bool::BoolT), |a, _i| {
|
||||||
|
Data::new(data::bool::Bool(a.get().iterable().unwrap().any(|v| v.get().as_any().downcast_ref::<data::bool::Bool>().is_some_and(|v| v.0))))
|
||||||
|
})))
|
||||||
|
.add_var("all".to_string(), Data::new(genfunc_iter_in_val_out("all".to_string(), data::bool::BoolT, Type::new(data::bool::BoolT), |a, _i| {
|
||||||
|
Data::new(data::bool::Bool(a.get().iterable().unwrap().all(|v| v.get().as_any().downcast_ref::<data::bool::Bool>().is_some_and(|v| v.0))))
|
||||||
|
})))
|
||||||
|
.add_var(
|
||||||
"for_each".to_string(),
|
"for_each".to_string(),
|
||||||
Data::new(data::function::Function {
|
Data::new(data::function::Function {
|
||||||
info: Arc::new(program::run::Info::neverused()),
|
info: Arc::new(program::run::Info::neverused()),
|
||||||
@ -383,3 +392,27 @@ impl Iters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn genfunc_iter_in_val_out(
|
||||||
|
name: String,
|
||||||
|
iter_type: impl MersType + 'static,
|
||||||
|
out_type: Type,
|
||||||
|
run: impl Fn(Data, &mut crate::info::Info<program::run::Local>) -> Data + Send + Sync + 'static,
|
||||||
|
) -> Function {
|
||||||
|
Function {
|
||||||
|
info: Arc::new(crate::info::Info::neverused()),
|
||||||
|
info_check: Arc::new(Mutex::new(crate::info::Info::neverused())),
|
||||||
|
out: Arc::new(move |a, _i| {
|
||||||
|
if let Some(iter_over) = a.iterable() {
|
||||||
|
if iter_over.is_included_in(&iter_type) {
|
||||||
|
Ok(out_type.clone())
|
||||||
|
} else {
|
||||||
|
Err(format!("Cannot call function {name} on iterator over type {a}, which isn't {iter_type}.").into())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Err(format!("Cannot call function {name} on non-iterable type {a}.").into())
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
run: Arc::new(run),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user