diff --git a/ablescript/src/variables.rs b/ablescript/src/variables.rs index 96c963d..f16f94c 100644 --- a/ablescript/src/variables.rs +++ b/ablescript/src/variables.rs @@ -472,7 +472,35 @@ impl ops::Sub for Value { tape_len: lhs_tl, }, }, - Functio::Able { params, body } => todo!(), + Functio::Able { + params: lhs_params, + body: lhs_body, + } => match rhs.into_functio() { + Functio::Able { + params: rhs_params, + body: rhs_body, + } => Functio::Able { + params: lhs_params + .into_iter() + .zip(rhs_params.into_iter()) + .filter_map(|(l, r)| if l != r { Some(l) } else { None }) + .collect(), + body: lhs_body + .into_iter() + .zip(rhs_body.into_iter()) + .filter_map(|(l, r)| if l != r { Some(l) } else { None }) + .collect(), + }, + rhs => Value::Int( + Value::Functio(Functio::Able { + params: lhs_params, + body: lhs_body, + }) + .into_i32() + - Value::Functio(rhs).into_i32(), + ) + .into_functio(), + }, Functio::Chain { functios, kind } => todo!(), Functio::Eval(lhs_code) => Functio::Eval(lhs_code.replace( &match rhs.into_functio() {