Ogma is an [[MIT License]] licensed scripting language for processing tabular data written in [[Rust]].
- [Source](https://github.com/kdr-aus/ogma)
- [Documentation](https://docs.daedalus.report/ogma.book/01%20introduction.md?book=true)
> Welcome to the `ogma` project! `ogma` is a scripting language focused on _ergonomically_ and _efficiently_ processing tabular data, with _batteries included_. Mixing aspects of terminal shells and functional programming, the ogma project lets one interact with data in a refreshing way.
# Notability
Querying, filtering, and processing [[CSV]] and similar files.
## Dependents
Used by [Daedalus](https://daedalus.report/).
# Philosophy
# Platform Support
# Features
## Pipeline Concepts
> A fundamental design choice of ogma is to chunk expressions into a ‘block’. Each block has a definitive _input_ and _output_ type. This style of data flow is commonly referred to as _pipelining_. It is more common to see pipelining in functional languages and terminal shells. In terminal shells, the data transferred through a pipe is a stream of bytes, in ogma the data is more structured and has a definitive _type_ when passing through a pipe.
> Each command in ogma works on a specific input type. Sometimes the same named command can work on different input types, such as `len` which returns the length of a string or the number of rows in a table.
## Anti-Features
- Recursion is **not** supported in ogma. _This is intentional for the static type checking **and** lazy evaluation_.
## Syntax
```elixir
# Greatest Common Divisor
# Invariant that `b < a` is upheld to reduce number of branches.
def gcd (a b) { range 0 {\$a|abs|min {\$b|abs}} |
fold-while { if {\$a|< $b} {Tuple $b $a} {Tuple $a $b} }
{ get t1 | != 0 }
{ let $acc | get t0 | mod $acc.t1 | Tuple $acc.t1 #i }
| get t0
}
```
# Tips
# References
- https://docs.daedalus.report/ogma.book/03%20pipeline%20concepts.md?book=true