From ae8e51c05348d1897a94890063f1574848867965 Mon Sep 17 00:00:00 2001 From: Rendo Date: Sat, 8 Nov 2025 22:48:03 +0500 Subject: [PATCH] formula run --- src/formula.rs | 20 ++++++++++++++++++++ src/lib.rs | 1 + src/node/handler.rs | 3 +++ src/node/mod.rs | 1 + 4 files changed, 25 insertions(+) create mode 100644 src/formula.rs diff --git a/src/formula.rs b/src/formula.rs new file mode 100644 index 0000000..b651fc4 --- /dev/null +++ b/src/formula.rs @@ -0,0 +1,20 @@ +use crate::node::Node; + +#[derive(Clone)] +pub struct Formula { + tree: Node, + x: f64, + rating: f64, +} + +impl Formula { + pub fn run(&mut self, inputs: Vec) -> Vec { + let mut outputs: Vec = vec![]; + for input in inputs { + self.x = input; + outputs.push(self.tree.get_value()); + } + outputs + } + pub fn mutate(&mut self) {} +} diff --git a/src/lib.rs b/src/lib.rs index 274142d..52cf965 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1 +1,2 @@ +mod formula; mod node; diff --git a/src/node/handler.rs b/src/node/handler.rs index 43e35fa..2612729 100644 --- a/src/node/handler.rs +++ b/src/node/handler.rs @@ -1,7 +1,9 @@ +#[derive(Clone, Copy)] pub enum NodeHandler { Number { number: f64 }, Function { function: fn(Vec) -> f64 }, Variable { getter: fn() -> f64 }, + Empty, } impl NodeHandler { @@ -10,6 +12,7 @@ impl NodeHandler { NodeHandler::Number { number } => number.clone(), NodeHandler::Function { function } => function(inputs), NodeHandler::Variable { getter } => getter(), + NodeHandler::Empty => 0f64, } } } diff --git a/src/node/mod.rs b/src/node/mod.rs index 0e67b0f..9288441 100644 --- a/src/node/mod.rs +++ b/src/node/mod.rs @@ -5,6 +5,7 @@ mod functions; mod handler; mod node_modifier; +#[derive(Clone)] pub struct Node { children: Vec, handler: NodeHandler,