Fōrmulæ is a free, open source, symbolic, visual, homoiconic, high-level, multi-paradigm, arbitrary-precision programming language for scripting in academic and research environments.
The main objectives of the Fōrmulæ language are:
- To create programs with a notation closer to algorithms and mathematics
- To minimize the requirements for the programmer (only a web browser is needed)
- To have modularity of the language, packages incorporating new elements to the language can be created and dynamically/selectively added.
If you want to know more about Fōrmulæ, please refer to its website formulae.org.
In the repository formulae-js you can find the source code for the Fōrmulæ web application, written in JavaScript.
With Fōrmulæ, you can create code to visualize, edit or manipulate expressions from many fields. The code is grouped in units called packages. The code for every package is hosted in the following repositories:
The following are fundamental packages
Package | Repository | Brief description |
---|---|---|
Arithmetics | package-arithmetic-js | Integer, decimal and rational numbers. Basic arithmetic, transcendental, trigonometric, hyperbolic operations with arbitrary precision integers and decimals. Rounding modes. |
Algebra | package-algebra-js | Basic expression simplifications based on algebra rules. |
Complex | package-complex-js | Complex arithmetic. Imaginary unit, complex conjugate. |
Relation | package-relation-js | Basic comparison operations, three-way comparison, minimum, maximum, membership. |
Logic | package-logic-js | Logic literals, basic logic operations (negation, conjunction, disjunction, conditional, equivalence, exclusive disjunction). |
Expression | package-expression-js | Common operations to expressions and reflection, such as cardinality, subexpression, insertion and deletion of subexpressions, serialization/deserialization, programatic creation of expressions. |
List | package-list-js | List manipulation, list and table creation, mathematical operations with lists and matrices |
Symbolic | package-symbolic-js | Definition and referecing of local and global symbols and functions, lambda expressions. |
Strings | package-string-js | Creation and operations with strings, text, and regular expressions, Unicode support. |
Color | package-color-js | Creation and operations on colors, visual representation of colors. |
Programming | package-programming-js | Structured programming structures, such as sequence, decision and iteration expressions. Visualizacion as either flowchart or indented code. |
Raster graphics | package-graphic-raster-js | Creation of graphics, pixel operations, outline and filling of geometric primitives (lines, rectangles, ellipses, arcs), inclusion of other graphics, text, turtle graphics, primitives on coordinates (translations, rotating, scaling). |
Charts | package-chart-js | Creation of charts from data. Bar, line, area, dot, step, and pie types. |
Diagramming | package-diagramming-js | Diagrams, tree structures. |
Visualization | package-visualization-js | Changing the look of expressions, font color, size and attributes (bold, italic), crossing out, arrangement of expressions. |
Bitwise | package-bitwise-js | Bitwise (and, or, not, xor), bit length, bit count, shifts, bit (set, get, clear, flip) operation on arbitrary length integers. |
Time | package-time-js | Time datatype and operations, Gregorian calendar part management. |
Data | package-data-js | Conversion between byte buffers and arbitrary strings, Base64 strings, hexadecimal strings, etc. |
The following packages are intended for specialized users
Package | Repository | Brief description |
---|---|---|
Chemistry | package-chemistry-js | Chemical elements, homonuclear & heteronuclear compounds. |
Cryptography | package-cryptography-js | Key generation, hash digestion, encryption/decryption, generation/verification of digital signatures. |
Quantum programming | package-quantum-js | Kets, quantum circuits, quantum gates, execution of quantum circuits, unitary matrix of a quantum circuit. |
Fōrmulæ packages are in continuos revision and improvement. However, the following packages are in early stages of development:
Package | Repository | Brief description |
---|---|---|
Filesystem | package-filesystem-js | Management of files and directories |
Plot | package-plot-js | Mathematical plots. 2D function plot, 2D parametric plot, 2D polar curve, 3D parametric curve, 3D function surface, 3D parametric surface, surface map, surface contour. |
Name | Brief description |
---|---|
Statistics | Statistical computing |
Database access | Connection to a SQL database, execution of SQL statements |
Moreover, with Fōrmulæ you can create formatted content (text with styles, use of images, paragraphs, bulleted list, alignment, etc.) (typesetting).
Package | Repository | Brief description |
---|---|---|
Typesetting | package-typesetting-js | Document typesetting |
All the content of its website is written in Fōrmulæ itself. This content is also hosted in the web-content repository.
Examples of the content:
Visit this Pinterest galley of images created with Fōrmulæ.