Files
scl/README.md
2025-09-01 00:18:59 -04:00

66 lines
1.4 KiB
Markdown

# SCL: Simple CAS Language
*v0.3*
SCL aims to be a human-friendly Computer Algebra System (CAS) inspired by
[maxima](https://maxima.sourceforge.io/) that feels like writing on paper. In
its current state, SCL can be used as a functional programming language capable
of performing simple arithmetic. The codebase is about 2,000 lines of
handwritten C, including a parser, interpreter, and runtime. It uses a linked
environment scoping model.
## Usage
To download and run:
```bash
git clone https://git.signorovitch.org/scl/scl -b stable && cd scl
make release
./scl.out
```
### For Development
```bash
git clone git@signorovitch.org:scl/scl --recurse-submodules && cd scl
make all test
./scl.out
```
If you wish to run tests, make sure to run `git clone --recurse-submodules` to
include the [Unity](https://github.com/ThrowTheSwitch/Unity) test framework.
*Note that tests are currently in poor use. I hope to amend this in the future.*
## Syntax
SCL's syntax will feel familiar to other functional programming languages.
```scl
> x = 3 + 3 * 3; x + 1
= 13
> f(x) x + 1
> f(1)
= 2
> (\(x) 2 * x)(5)
= 10
> f(g) g(2)
> f(\(x) 2 * x)
= 4
```
Here's a simple factorial function, using recursion:
```scl
> factorial(n) {
> if (n == 0) { 1 }
> else { n * factorial(n - 1) }
> }
```
SCL's syntax is quite flexible. The above function could be more concisely
written as:
```scl
> factorial(n) ? n == 0 1 n * factorial(n - 1)
```