#wolfram #wolfram-language #mathematica #wolfram-engine #expression

wolfram-expr

Efficient and ergonomic representation of Wolfram expressions in Rust

4 releases

new 0.1.3 Dec 6, 2022
0.1.2 Jul 26, 2022
0.1.1 Feb 19, 2022
0.1.0 Feb 8, 2022

#386 in Encoding

Download history 29/week @ 2022-08-12 28/week @ 2022-08-19 18/week @ 2022-08-26 31/week @ 2022-09-02 31/week @ 2022-09-09 32/week @ 2022-09-16 21/week @ 2022-09-23 48/week @ 2022-09-30 36/week @ 2022-10-07 16/week @ 2022-10-14 26/week @ 2022-10-21 42/week @ 2022-10-28 41/week @ 2022-11-04 35/week @ 2022-11-11 33/week @ 2022-11-18 15/week @ 2022-11-25

131 downloads per month
Used in 7 crates (6 directly)

MIT/Apache

46KB
694 lines

wolfram-expr

Crates.io License Documentation

API Documentation | Changelog | Contributing

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()
    ),
}
  • 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.

Dependencies

~1MB
~23K SLoC