Skip to content

Link fails for specific rust code` #98

@gregofi

Description

@gregofi

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

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions