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