mirror of
https://codeberg.org/uzu/strudel
synced 2026-07-13 14:26:58 -04:00
d198910a86
- @strudel/codemirror@1.2.7 - @strudel/core@1.2.6 - @strudel/csound@1.2.7 - @strudel/draw@1.2.6 - @strudel/embed@1.1.2 - @strudel/gamepad@1.2.6 - @strudel/hydra@1.2.6 - @strudel/midi@1.2.7 - @strudel/mini@1.2.6 - mondolang@1.1.2 - @strudel/mondo@1.1.6 - @strudel/motion@1.2.6 - @strudel/mqtt@1.2.6 - @strudel/osc@1.3.1 - @strudel/reference@1.2.2 - @strudel/repl@1.2.8 - @strudel/sampler@0.2.4 - @strudel/serial@1.2.6 - @strudel/soundfonts@1.2.7 - superdough@1.2.7 - supradough@1.2.5 - @strudel/tonal@1.2.6 - @strudel/transpiler@1.2.6 - vite-plugin-bundle-audioworklet@0.1.2 - @strudel/web@1.2.7 - @strudel/webaudio@1.2.7 - @strudel/xen@1.2.6
mondo
a lisp-based language intended to be used as a custom dsl for patterns that can stand on its own feet.
see the test folder for usage examples
more info:
Example Usage
import { MondoRunner } from 'mondolang'
// define our library of functions and variables
let lib = {
add: (a, b) => a + b,
mul: (a, b) => a * b,
PI: Math.PI,
};
// this function will evaluate nodes in the syntax tree
function evaluator(node) {
// check if node is a leaf node (!= list)
if (node.type !== 'list') {
// check lib if we find a match in the lib, otherwise return value
return lib[node.value] ?? node.value;
}
// now it can only be a list..
const [fn, ...args] = node.children;
// children in a list will already be evaluated
// the first child is expected to be a function
if (typeof fn !== 'function') {
throw new Error(`"${fn}" is not a function`);
}
return fn(...args);
}
const runner = new MondoRunner({ evaluator });
const pat = runner.run('add 1 (mul 2 PI)') // 7.283185307179586