Website | Source

ArkScript is

Example: More-or-less game:

(let number (random 0 10000))

(let game (fun () {
  (let impl (fun (tries) {
    (let guess (toNumber (input "Input a numeric value: ")))
    (if (< guess number)
      {
        (print (format "It's more than {}!" guess))
        (impl (+ tries 1)) }
      (if (= guess number)
        {
          (print "You found it!")
          tries }
        {
          (print (format "It's less than {}!" guess))
          (impl (+ tries 1)) }))}))

  (let count (impl 0))
  (print (format "You won in {} guesses." count)) }))

(game)

Embedding in C++

#include <Ark/Ark.hpp>
 
int main()
{
    // A state can be shared by multiple VM ; they can't overwrite it
    Ark::State state;
 
    // This will compile the code, but you can also give a file with state.doFile()
    state.doString("(let foo (fun (x y) (+ x y 2)))");
    // You can register C++ function (only before calling vm.run())
    state.loadFunction("cpp_foo", [](std::vector<Ark::Value>& args, Ark::VM* vm) {
        return Ark::Value(static_cast<int>(args.size()));
    });
 
    Ark::VM vm(state);
    vm.run();
 
    auto value = vm.call("foo", 5, 6.0);
    // displays 13
    std::cout << value << "\n";
 
    return 0;
}


Tags: language   functional   vm   native  

Last modified 11 October 2025