wolfram-expr 0.6.0-alpha.2

Efficient and ergonomic representation of Wolfram expressions in Rust
Documentation

wolfram-expr

Crates.io License Documentation

Efficient and ergonomic representation of Wolfram expressions in Rust.

Examples

Construct the expression {1, 2, 3}:

use wolfram_expr::{Expr, Symbol};

let expr = Expr::normal(Symbol::new("System`List"), vec![
    Expr::from(1),
    Expr::from(2),
    Expr::from(3)
]);

Pattern match over different expression variants:

use wolfram_expr::{Expr, ExprKind};

let expr = Expr::from("some arbitrary expression");

match expr.kind() {
    ExprKind::Integer(1) => println!("got 1"),
    ExprKind::Integer(n) => println!("got {}", n),
    ExprKind::Real(_) => println!("got a real number"),
    ExprKind::String(s) => println!("got string: {}", s),
    ExprKind::Symbol(sym) => println!("got symbol named {}", sym.symbol_name()),
    ExprKind::Normal(e) => println!(
        "got expr with head {} and length {}",
        e.head(),
        e.elements().len()
    ),
    // ExprKind is #[non_exhaustive] (variants will be added over time, e.g. for
    // WXF wire types like NumericArray, Association, BigInteger, ...). Catch-all
    // arm keeps your code forward-compatible.
    _ => println!("got some other expression variant"),
}

Related Links

Related crates

  • wolfram-library-link — author libraries that can be dynamically loaded by the Wolfram Language.
  • wstp — bindings to the Wolfram Symbolic Transport Protocol, used for passing arbitrary Wolfram expressions between programs.
  • wolfram-app-discovery — utility for locating local installations of Wolfram applications and the Wolfram Language.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

See CONTRIBUTING.md for more information.