use rayforce::{col, sum, Fn, Runtime, Table, Value};
fn main() {
let _rt = Runtime::new().unwrap();
let square = Fn::new("(fn [x] (* x x))").unwrap();
println!("лямбда: {square}");
let r = square.call(&[Value::i64(5)]).unwrap();
println!("square(5) = {}", r.as_i64().unwrap());
let r = square.call(&[Value::vec(&[2i64, 3, 4])]).unwrap();
println!("square([2 3 4]) = {:?}", r.as_slice::<i64>().unwrap());
let add = Fn::new("(fn [x y] (+ x y))").unwrap();
let r = add.call(&[Value::i64(10), Value::i64(32)]).unwrap();
println!("add(10, 32) = {}", r.as_i64().unwrap());
let table = Table::new(
&["id", "value"],
&[Value::sym_vec(&["a", "b", "c"]), Value::vec(&[2i64, 3, 4])],
)
.unwrap();
let out = table
.select()
.col("id")
.agg("squared", square.apply([col("value")]).unwrap())
.execute()
.unwrap();
println!("\nselect id, squared = square(value):\n{}", out.as_value());
let out = table
.select()
.agg("sum_sq", sum(square.apply([col("value")]).unwrap()))
.execute()
.unwrap();
println!(
"\nsum of squares = {}",
out.column("sum_sq")
.unwrap()
.get(0)
.unwrap()
.as_i64()
.unwrap()
);
}