Symbolic parser generator for Julia language expressions using REDUCE algebra term rewriter
The premise behind Reduce.jl is based on the idea that Symbol
and Expr
types can be translated into computer algebra rewrite commands and then automatically parsed back into Julia ASTs, essentially extending the Julia language into a fully programable symbolic AST rewrite environment.
REDUCE is a system for general algebraic computations of interest to mathematicians, scientists and engineers:
Interface for applying symbolic manipulation on Julia expressions using REDUCE’s term rewrite system:
RExpr
objects that can parse
into julia Expr
objects and vice versa;rcall
method;reduce>
REPL within the Julia terminal window activated by }
key;+
,-
,*
,^
,/
,//
compute on Symbol
and Expr
types;Additional packages that depend on Reduce.jl are maintained at JuliaReducePkg.
The upstream REDUCE software created by Anthony C. Hearn is maintained by collaborators on SourceForge.
This package is a heavily modifed version of Nathan Smith’s Maxima.jl with many additional features.
The Reduce
package currently provides a robust interface to directly use the CSL version of REDUCE within the Julia language and the REPL. This is achieved by interfacing the abstract syntax tree of Expr
objects with the parser generator for RExpr
objects and then using an IOBuffer
to communicate with redpsl
.
REDUCE is a system for doing scalar, vector and matrix algebra by computer, which also supports arbitrary precision numerical approximation and interfaces to gnuplot to provide graphics. It can be used interactively for simple calculations but also provides a full programming language, with a syntax similar to other modern programming languages. REDUCE has a long and distinguished place in the history of computer algebra systems. Other systems that address some of the same issues but sometimes with rather different emphasis are Axiom, Macsyma (Maxima), Maple and Mathematica. REDUCE is implemented in Lisp (as are Axiom and Macsyma), but this is completely hidden from the casual user. REDUCE primarily runs on either Portable Standard Lisp (PSL) or Codemist Standard Lisp (CSL), both of which are included in the SourceForge distribution. PSL is long-established and compiles to machine code, whereas CSL is newer and compiles to byte code. Hence, PSL may be faster but CSL may be available on a wider range of platforms.
Releases of Reduce.jl
enable the general application of various REDUCE functionality and packages to manipulate the Julia language to simplify and compute new program expressions at run-time. Intended for uses where a symbolic pre-computation is required for numerical algorithm code generation.
Julia is a high-level, high-performance dynamic programming language for numerical computing. It provides a sophisticated compiler, distributed parallel execution, numerical accuracy, and an extensive mathematical function library. Julia’s Base library, largely written in Julia itself, also integrates mature, best-of-breed open source C and Fortran libraries for linear algebra, random number generation, signal processing, and string processing. The strongest legacy of Lisp in the Julia language is its metaprogramming support. Like Lisp, Julia represents its own code as a data structure of the language itself. Since code is represented by objects that can be created and manipulated from within the language, it is possible for a program to transform and generate its own code. This allows sophisticated code generation without extra build steps, and also allows true Lisp-style macros operating at the level of abstract syntax trees.