-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Generating link for this code fails with 500
pub enum LambdaExpression {
Variable(char),
Application(Box<LambdaExpression>, Box<LambdaExpression>),
Abstraction {
parameter: String,
body: Box<LambdaExpression>,
},
}
impl ToString for LambdaExpression {
fn to_string(&self) -> String {
match self {
LambdaExpression::Variable(name) => name.to_string(),
LambdaExpression::Application(target, arg) => {
let target_s = target.to_string();
let arg_s = arg.to_string();
format!("({} {})", target_s, arg_s)
}
LambdaExpression::Abstraction { parameter, body } => {
format!("(λ {}. {})", parameter, body.to_string())
}
}
}
}
impl LambdaExpression {
fn is_beta_possible(&self) -> bool {
match self {
LambdaExpression::Variable(_) => false,
LambdaExpression::Application(arg, _) if matches!(**arg, LambdaExpression::Abstraction{..}) => {
true
},
LambdaExpression::Application(left, right) => {
left.is_beta_possible() || right.is_beta_possible()
},
LambdaExpression::Abstraction { body, .. } => {
body.is_beta_possible()
}
}
}
}
fn main() {
let expr = LambdaExpression::Application(
Box::new(LambdaExpression::Abstraction{
parameter: "a".to_string(),
body: Box::new(LambdaExpression::Variable('a')),
}),
Box::new(LambdaExpression::Variable('b')),
);
println!("{}", expr.to_string());
println!("{}", expr.is_beta_possible());
}Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working