diff --git a/examples/arithmetic.mq b/examples/arithmetic.mq deleted file mode 100644 index ad36d64..0000000 --- a/examples/arithmetic.mq +++ /dev/null @@ -1,3 +0,0 @@ -say (1 + 3); -say (3 * 10); -say 42 diff --git a/examples/arrays.mq b/examples/arrays.mq deleted file mode 100644 index c7231e8..0000000 --- a/examples/arrays.mq +++ /dev/null @@ -1,11 +0,0 @@ -var numbers = [1;2;3;4;5]; - -var for = [array iteration | - var iter = [i | if (i < (len array)) [ - iteration (numbers.i); - iter (i+1) - ]]; - iter 0 -]; - -for numbers say; diff --git a/examples/rhythm-of-primes.mq b/examples/rhythm-of-primes.mq new file mode 100644 index 0000000..75f9693 --- /dev/null +++ b/examples/rhythm-of-primes.mq @@ -0,0 +1,16 @@ +------------------------------------------------------------ +Inspired by Marc Evanstein video "The Rythm of The Primes" +Link: https://www.youtube.com/watch?v=8x374slJGuo +------------------------------------------------------------ + +var Length = 20; + +var cmajor = [c;d;e;f;g]; +var scale = reverse cmajor; +var primes = nprimes (len scale); +var indicies = up (len scale); + +oct 3; +len (1/16); + +for (2 + up Length) [ i | play (chord scale.(indicies.(i % primes == 0))); ]; diff --git a/src/builtin_functions.cc b/src/builtin_functions.cc index fe1e2f8..e1b8902 100644 --- a/src/builtin_functions.cc +++ b/src/builtin_functions.cc @@ -349,7 +349,7 @@ static Result builtin_primes(Interpreter&, std::vector args) return Error { .details = errors::Unsupported_Types_For { .type = errors::Unsupported_Types_For::Function, - .name = "primes", + .name = "nprimes", .possibilities = { "(number) -> array of number" } @@ -357,6 +357,18 @@ static Result builtin_primes(Interpreter&, std::vector args) }; } +static Result builtin_for(Interpreter &i, std::vector args) +{ + if (is_indexable(args[0].type)) { + for (size_t n = 0; n < args[0].size(); ++n) { + Try(args[1](i, { Try(args[0].index(i, n)) })); + } + return Value{}; + } + + unimplemented(); +} + void Interpreter::register_builtin_functions() { auto &global = *Env::global; @@ -609,5 +621,6 @@ error: global.force_define("up", builtin_range); global.force_define("down", builtin_range); - global.force_define("primes", builtin_primes); + global.force_define("nprimes", builtin_primes); + global.force_define("for", builtin_for); }