From 7b5e43293ac8687aa5b0556d46ce1189c04bbd8e Mon Sep 17 00:00:00 2001 From: Robert Bendun Date: Mon, 29 Aug 2022 21:38:15 +0200 Subject: [PATCH] For as builtin and new example that plays primes --- examples/arithmetic.mq | 3 --- examples/arrays.mq | 11 ----------- examples/rhythm-of-primes.mq | 16 ++++++++++++++++ src/builtin_functions.cc | 17 +++++++++++++++-- 4 files changed, 31 insertions(+), 16 deletions(-) delete mode 100644 examples/arithmetic.mq delete mode 100644 examples/arrays.mq create mode 100644 examples/rhythm-of-primes.mq 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); }