function documentation part 2
This commit is contained in:
parent
986545b2ec
commit
c8b8adca5d
@ -370,6 +370,12 @@ static std::optional<Error> action_play(Interpreter &i, Value v)
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `play` odgrywa zadaną nutę lub sekwencję.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > play chord c e g
|
||||||
|
//: ```
|
||||||
/// Play notes
|
/// Play notes
|
||||||
template<With_Index_Operator Container = std::vector<Value>>
|
template<With_Index_Operator Container = std::vector<Value>>
|
||||||
static inline Result<Value> builtin_play(Interpreter &interpreter, Container args)
|
static inline Result<Value> builtin_play(Interpreter &interpreter, Container args)
|
||||||
@ -395,6 +401,12 @@ static inline Result<Value> builtin_play(Interpreter &interpreter, Container arg
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `par` odgrywa pierwszy element przez sumę długości pozostałych elementów. Odegranie pierwszego elementu wraz z pozostałymi następuje współbieżnie.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > par c (1/2) b b e
|
||||||
|
//: ```
|
||||||
/// Play first argument while playing all others
|
/// Play first argument while playing all others
|
||||||
static Result<Value> builtin_par(Interpreter &interpreter, std::vector<Value> args) {
|
static Result<Value> builtin_par(Interpreter &interpreter, std::vector<Value> args) {
|
||||||
Try(ensure_midi_connection_available(interpreter, "par"));
|
Try(ensure_midi_connection_available(interpreter, "par"));
|
||||||
@ -430,6 +442,14 @@ static Result<Value> builtin_par(Interpreter &interpreter, std::vector<Value> ar
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `sim` odgrywa zadane sekwencje symultanicznie.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > A := c e g d
|
||||||
|
//: > B := f f a a
|
||||||
|
//: > sim A B
|
||||||
|
//: ```
|
||||||
/// Plays each argument simultaneously
|
/// Plays each argument simultaneously
|
||||||
static Result<Value> builtin_sim(Interpreter &interpreter, std::vector<Value> args)
|
static Result<Value> builtin_sim(Interpreter &interpreter, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -558,6 +578,13 @@ static inline size_t upper_sieve_bound_to_yield_n_primes(size_t n_primes)
|
|||||||
return std::ceil(x);
|
return std::ceil(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `nprimes` zwraca zadaną liczbę kolejnych liczb pierwszych.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > nprimes 4
|
||||||
|
//: (2, 3, 5, 7)
|
||||||
|
//: ```
|
||||||
/// Generate n primes
|
/// Generate n primes
|
||||||
static Result<Value> builtin_primes(Interpreter&, std::vector<Value> args)
|
static Result<Value> builtin_primes(Interpreter&, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -607,6 +634,16 @@ static Result<Value> builtin_primes(Interpreter&, std::vector<Value> args)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `nprimes` zwraca zadaną liczbę kolejnych liczb pierwszych.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > for (nprimes 4) (say)
|
||||||
|
//: 2
|
||||||
|
//: 3
|
||||||
|
//: 5
|
||||||
|
//: 7
|
||||||
|
//: ```
|
||||||
/// Iterate over container
|
/// Iterate over container
|
||||||
static Result<Value> builtin_for(Interpreter &i, std::vector<Value> args)
|
static Result<Value> builtin_for(Interpreter &i, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -627,6 +664,12 @@ static Result<Value> builtin_for(Interpreter &i, std::vector<Value> args)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `fold` TODO.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: TODO
|
||||||
|
//: ```
|
||||||
/// Fold container
|
/// Fold container
|
||||||
static Result<Value> builtin_fold(Interpreter &interpreter, std::vector<Value> args) {
|
static Result<Value> builtin_fold(Interpreter &interpreter, std::vector<Value> args) {
|
||||||
constexpr auto guard = Guard<2> {
|
constexpr auto guard = Guard<2> {
|
||||||
@ -653,6 +696,14 @@ static Result<Value> builtin_fold(Interpreter &interpreter, std::vector<Value> a
|
|||||||
return guard.yield_error();
|
return guard.yield_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `map` aplikuje zadaną funkcję do każdego argumentu.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > map up (nprimes 3)
|
||||||
|
//: ((0, 1), (0, 1, 2), (0, 1, 2, 3, 4))
|
||||||
|
//: ```
|
||||||
|
|
||||||
static Result<Value> builtin_map(Interpreter &interpreter, std::vector<Value> args)
|
static Result<Value> builtin_map(Interpreter &interpreter, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
static constexpr auto guard = Guard<2> {
|
static constexpr auto guard = Guard<2> {
|
||||||
@ -684,6 +735,12 @@ static Result<Value> builtin_map(Interpreter &interpreter, std::vector<Value> ar
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `scan` oblicza sumę prefiksową (dodaje do siebie wszystkie liczby od 1 do danej liczby).
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//:
|
||||||
|
//: ```
|
||||||
/// Scan computes inclusive prefix sum
|
/// Scan computes inclusive prefix sum
|
||||||
static Result<Value> builtin_scan(Interpreter &interpreter, std::vector<Value> args)
|
static Result<Value> builtin_scan(Interpreter &interpreter, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -706,6 +763,19 @@ static Result<Value> builtin_scan(Interpreter &interpreter, std::vector<Value> a
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `if` wykonuje określony blok po spełnieniu warunku, alternatywnie wykonuje inny blok kodu w przeciwnym wypadku.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > if true (say 42)
|
||||||
|
//: 42
|
||||||
|
//: > if false (say 42)
|
||||||
|
//: >
|
||||||
|
//: > if true (say 42) (say 0)
|
||||||
|
//: 42
|
||||||
|
//: > if false (say 42) (say 0)
|
||||||
|
//: 0
|
||||||
|
//: ```
|
||||||
/// Execute blocks depending on condition
|
/// Execute blocks depending on condition
|
||||||
static Result<Value> builtin_if(Interpreter &i, std::span<Ast> args) {
|
static Result<Value> builtin_if(Interpreter &i, std::span<Ast> args) {
|
||||||
static constexpr auto guard = Guard<2> {
|
static constexpr auto guard = Guard<2> {
|
||||||
@ -737,6 +807,18 @@ static Result<Value> builtin_if(Interpreter &i, std::span<Ast> args) {
|
|||||||
return Value{};
|
return Value{};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `while` wykonuje określony blok dopóki warunek jest spełniony.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > i := 0
|
||||||
|
//: > while (i < 10) (say i, i += 2)
|
||||||
|
//: 0
|
||||||
|
//: 2
|
||||||
|
//: 4
|
||||||
|
//: 6
|
||||||
|
//: 8
|
||||||
|
//: ```
|
||||||
/// Loop block depending on condition
|
/// Loop block depending on condition
|
||||||
static Result<Value> builtin_while(Interpreter &i, std::span<Ast> args) {
|
static Result<Value> builtin_while(Interpreter &i, std::span<Ast> args) {
|
||||||
static constexpr auto guard = Guard<2> {
|
static constexpr auto guard = Guard<2> {
|
||||||
@ -760,6 +842,12 @@ static Result<Value> builtin_while(Interpreter &i, std::span<Ast> args) {
|
|||||||
return Value{};
|
return Value{};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `try` przystępuje do wykonania bloków kodu, a jeżeli którykolwiek z nich zakończy się niepowodzeniem, wykonuje ostatni. Jeżeli ostatni też zakończy się niepowodzeniem, to trudno.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: TODO
|
||||||
|
//: ```
|
||||||
/// Try executing all but last block and if it fails execute last one
|
/// Try executing all but last block and if it fails execute last one
|
||||||
static Result<Value> builtin_try(Interpreter &interpreter, std::vector<Value> args)
|
static Result<Value> builtin_try(Interpreter &interpreter, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -790,6 +878,16 @@ static Result<Value> builtin_try(Interpreter &interpreter, std::vector<Value> ar
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `update` aktualizuje dany element listy na nową wartość.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > A := down 5
|
||||||
|
//: > A
|
||||||
|
//: (4, 3, 2, 1, 0)
|
||||||
|
//: > update A 3 7
|
||||||
|
//: (4, 3, 2, 7, 0)
|
||||||
|
//: ```
|
||||||
/// Update value inside of array
|
/// Update value inside of array
|
||||||
static Result<Value> builtin_update(Interpreter &i, std::vector<Value> args)
|
static Result<Value> builtin_update(Interpreter &i, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -820,6 +918,15 @@ static Result<Value> builtin_update(Interpreter &i, std::vector<Value> args)
|
|||||||
return guard.yield_error();
|
return guard.yield_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `typeof` zwraca typ zmiennej.
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > A := down 5
|
||||||
|
//: > A
|
||||||
|
//: (4, 3, 2, 1, 0)
|
||||||
|
//: > typeof A
|
||||||
|
//: array
|
||||||
|
//: ```
|
||||||
/// Return typeof variable
|
/// Return typeof variable
|
||||||
static Result<Value> builtin_typeof(Interpreter&, std::vector<Value> args)
|
static Result<Value> builtin_typeof(Interpreter&, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -858,6 +965,15 @@ Result<Value> traverse(Interpreter &interpreter, Value &&value, auto &&lambda)
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `set_len` przydziela wszystkim elementom listy zadaną długość.
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > A := c d e f
|
||||||
|
//: > A
|
||||||
|
//: (c, d, e, f)
|
||||||
|
//: > set_len (1/8) A
|
||||||
|
//: (c 1/8, d 1/8, e 1/8, f 1/8)
|
||||||
|
//: ```
|
||||||
/// Set length (first argument) to all other arguments preserving their shape
|
/// Set length (first argument) to all other arguments preserving their shape
|
||||||
static Result<Value> builtin_set_len(Interpreter &interpreter, std::vector<Value> args)
|
static Result<Value> builtin_set_len(Interpreter &interpreter, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -887,6 +1003,15 @@ static Result<Value> builtin_set_len(Interpreter &interpreter, std::vector<Value
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `set_oct` przydziela wszystkim elementom listy zadaną wysokość.
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > A := c d e f
|
||||||
|
//: > A
|
||||||
|
//: (c, d, e, f)
|
||||||
|
//: > set_oct 5 A
|
||||||
|
//: (c5, d5, e5, f5)
|
||||||
|
//: ```
|
||||||
/// Set octave (first argument) to all other arguments preserving their shape
|
/// Set octave (first argument) to all other arguments preserving their shape
|
||||||
static Result<Value> builtin_set_oct(Interpreter &interpreter, std::vector<Value> args)
|
static Result<Value> builtin_set_oct(Interpreter &interpreter, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -928,7 +1053,9 @@ static Result<Value> builtin_duration(Interpreter &interpreter, std::vector<Valu
|
|||||||
for (auto &arg : args) {
|
for (auto &arg : args) {
|
||||||
Try(traverse(interpreter, std::move(arg), [&](Chord &c) {
|
Try(traverse(interpreter, std::move(arg), [&](Chord &c) {
|
||||||
for (Note ¬e : c.notes) {
|
for (Note ¬e : c.notes) {
|
||||||
total += note.length ? *note.length : interpreter.current_context->length;
|
if (note.length) {
|
||||||
|
total += *note.length;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@ -1103,7 +1230,7 @@ static Result<Value> builtin_partition(Interpreter &i, std::vector<Value> args)
|
|||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
//: Funkcja `rotate` przenosi na koniec listy zadaną ilość elementów
|
//: Funkcja `rotate` przenosi na koniec listy zadaną ilość elementów.
|
||||||
//:
|
//:
|
||||||
//: # Przykład
|
//: # Przykład
|
||||||
//: ```
|
//: ```
|
||||||
@ -1137,6 +1264,13 @@ static Result<Value> builtin_rotate(Interpreter &i, std::vector<Value> args)
|
|||||||
return guard.yield_error();
|
return guard.yield_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `unique` zwraca listę argumentów z wyłączeniem powtórzeń.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > unique 1 2 3 2 2 3 4
|
||||||
|
//: (1, 2, 3, 4)
|
||||||
|
//: ```
|
||||||
/// Returns unique collection of arguments
|
/// Returns unique collection of arguments
|
||||||
static Result<Value> builtin_unique(Interpreter &i, std::vector<Value> args)
|
static Result<Value> builtin_unique(Interpreter &i, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -1153,6 +1287,13 @@ static Result<Value> builtin_unique(Interpreter &i, std::vector<Value> args)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `uniq` usuwa z listy argumentów następujące po sobie powtórzenia elementów.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > uniq 1 2 3 2 2 2 2 2 2 3 4
|
||||||
|
//: (1, 2, 3, 2, 3, 4)
|
||||||
|
//: ```
|
||||||
/// Returns arguments with all successive copies eliminated
|
/// Returns arguments with all successive copies eliminated
|
||||||
static Result<Value> builtin_uniq(Interpreter &i, std::vector<Value> args)
|
static Result<Value> builtin_uniq(Interpreter &i, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
@ -1170,6 +1311,13 @@ static Result<Value> builtin_uniq(Interpreter &i, std::vector<Value> args)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//: Funkcja `hash` zwraca wynik działania funkcji skrótu.
|
||||||
|
//:
|
||||||
|
//: # Przykład
|
||||||
|
//: ```
|
||||||
|
//: > hash 4
|
||||||
|
//: 177902120014
|
||||||
|
//: ```
|
||||||
static Result<Value> builtin_hash(Interpreter&, std::vector<Value> args)
|
static Result<Value> builtin_hash(Interpreter&, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
return Number(
|
return Number(
|
||||||
@ -1179,8 +1327,6 @@ static Result<Value> builtin_hash(Interpreter&, std::vector<Value> args)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Build chord from arguments
|
|
||||||
|
|
||||||
//: Funkcja `chord` zwraca akord złożony z nut podanych jako argumenty.
|
//: Funkcja `chord` zwraca akord złożony z nut podanych jako argumenty.
|
||||||
//:
|
//:
|
||||||
//: # Przykład
|
//: # Przykład
|
||||||
@ -1188,6 +1334,7 @@ static Result<Value> builtin_hash(Interpreter&, std::vector<Value> args)
|
|||||||
//: > chord c# e a#
|
//: > chord c# e a#
|
||||||
//: chord (c#, e, a#)
|
//: chord (c#, e, a#)
|
||||||
//: ```
|
//: ```
|
||||||
|
/// Build chord from arguments
|
||||||
static Result<Value> builtin_chord(Interpreter &i, std::vector<Value> args)
|
static Result<Value> builtin_chord(Interpreter &i, std::vector<Value> args)
|
||||||
{
|
{
|
||||||
Chord chord;
|
Chord chord;
|
||||||
@ -1215,7 +1362,6 @@ static Result<Value> builtin_note_on(Interpreter &interpreter, std::vector<Value
|
|||||||
note = interpreter.current_context->fill(note);
|
note = interpreter.current_context->fill(note);
|
||||||
interpreter.midi_connection->send_note_on(chan.as_int(), *note.into_midi_note(), vel.as_int());
|
interpreter.midi_connection->send_note_on(chan.as_int(), *note.into_midi_note(), vel.as_int());
|
||||||
}
|
}
|
||||||
return Value{};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Error {
|
return Error {
|
||||||
@ -1253,7 +1399,6 @@ static Result<Value> builtin_note_off(Interpreter &interpreter, std::vector<Valu
|
|||||||
note = interpreter.current_context->fill(note);
|
note = interpreter.current_context->fill(note);
|
||||||
interpreter.midi_connection->send_note_off(chan.as_int(), *note.into_midi_note(), 127);
|
interpreter.midi_connection->send_note_off(chan.as_int(), *note.into_midi_note(), 127);
|
||||||
}
|
}
|
||||||
return Value{};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Error {
|
return Error {
|
||||||
|
Loading…
Reference in New Issue
Block a user