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;
}
Last modified 11 October 2025