Make the prelude string a bit more manageable
This commit is contained in:
parent
2c5b1323dd
commit
36208b401e
@ -4,172 +4,175 @@
|
|||||||
#ifndef CHAISCRIPT_PRELUDE_HPP_
|
#ifndef CHAISCRIPT_PRELUDE_HPP_
|
||||||
#define CHAISCRIPT_PRELUDE_HPP_
|
#define CHAISCRIPT_PRELUDE_HPP_
|
||||||
|
|
||||||
const char *chaiscript_prelude = " \
|
#define CODE_STRING(x, y) #x ", " #y
|
||||||
def to_string(x) : call_exists(first, x) && call_exists(second, x) { \n\
|
|
||||||
\"<\" + x.first.to_string() + \", \" + x.second.to_string() + \">\"\n\
|
#define chaiscript_prelude CODE_STRING(\
|
||||||
}\n\
|
def to_string(x) : call_exists(first, x) && call_exists(second, x) { \
|
||||||
def to_string(x) : call_exists(range, x) && !x.is_type(\"string\"){ \n\
|
"<" + x.first.to_string() + ", " + x.second.to_string() + ">"; \
|
||||||
\"[\" + x.join(\", \") + \"]\"\n\
|
} \
|
||||||
}\n\
|
def to_string(x) : call_exists(range, x) && !x.is_type("string"){ \
|
||||||
def to_string(x) { \n\
|
"[" + x.join(", ") + "]"; \
|
||||||
return internal_to_string(x)\n\
|
} \
|
||||||
}\n\
|
def to_string(x) { \
|
||||||
def puts(x) { \n\
|
return internal_to_string(x); \
|
||||||
print_string(x.to_string()) \n\
|
} \
|
||||||
}; \n\
|
def puts(x) { \
|
||||||
def print(x) { \n\
|
print_string(x.to_string()); \
|
||||||
println_string(x.to_string()) \n\
|
} \
|
||||||
}; \n\
|
def print(x) { \
|
||||||
def max(a, b) { if (a>b) { a } else { b } } \n\
|
println_string(x.to_string()); \
|
||||||
def min(a, b) { if (a<b) { a } else { b } } \n\
|
} \
|
||||||
def odd(x) { if (x % 2 == 1) { true } else { false } } \n\
|
def max(a, b) { if (a>b) { a } else { b } } \
|
||||||
def even(x) { if (x % 2 == 0) { true } else { false } } \n\
|
def min(a, b) { if (a<b) { a } else { b } } \
|
||||||
def push_back(container, x) { container.push_back_ref(clone(x)) } \n\
|
def odd(x) { if (x % 2 == 1) { true } else { false } } \
|
||||||
def for_each(container, func) : call_exists(range, container) { \n\
|
def even(x) { if (x % 2 == 0) { true } else { false } } \
|
||||||
var range = range(container); \n\
|
def push_back(container, x) { container.push_back_ref(clone(x)) } \
|
||||||
while (!range.empty()) { \n\
|
def for_each(container, func) : call_exists(range, container) { \
|
||||||
func(range.front()) \n\
|
var range = range(container); \
|
||||||
range.pop_front() \n\
|
while (!range.empty()) { \
|
||||||
} \n\
|
func(range.front()); \
|
||||||
} \n\
|
range.pop_front(); \
|
||||||
def map(container, func) : call_exists(range, container) { \n\
|
} \
|
||||||
var retval = Vector() \n\
|
} \
|
||||||
var range = range(container) \n\
|
def map(container, func) : call_exists(range, container) { \
|
||||||
while (!range.empty()) { \n\
|
var retval = Vector(); \
|
||||||
retval.push_back(func(range.front())) \n\
|
var range = range(container); \
|
||||||
range.pop_front() \n\
|
while (!range.empty()) { \
|
||||||
} \n\
|
retval.push_back(func(range.front())); \
|
||||||
retval \n\
|
range.pop_front(); \
|
||||||
} \n\
|
} \
|
||||||
def foldl(container, func, initial) : call_exists(range, container){ \n\
|
retval \
|
||||||
var retval = initial \n\
|
} \
|
||||||
var range = range(container) \n\
|
def foldl(container, func, initial) : call_exists(range, container){ \
|
||||||
while (!range.empty()) { \n\
|
var retval = initial; \
|
||||||
retval = (func(range.front(), retval)) \n\
|
var range = range(container); \
|
||||||
range.pop_front() \n\
|
while (!range.empty()) { \
|
||||||
} \n\
|
retval = (func(range.front(), retval)); \
|
||||||
retval \n\
|
range.pop_front(); \
|
||||||
} \n\
|
} \
|
||||||
def sum(container) { foldl(container, `+`, 0.0) } \n\
|
retval; \
|
||||||
def product(container) { foldl(container, `*`, 1.0) } \n\
|
} \
|
||||||
def concat(x, y) : call_exists(clone, x) { \n\
|
def sum(container) { foldl(container, `+`, 0.0) } \
|
||||||
var retval = x; \n\
|
def product(container) { foldl(container, `*`, 1.0) } \
|
||||||
var len = y.size(); \n\
|
def concat(x, y) : call_exists(clone, x) { \
|
||||||
var i = 0; \n\
|
var retval = x; \
|
||||||
while (i < len) { \n\
|
var len = y.size(); \
|
||||||
retval.push_back(y[i]); \n\
|
var i = 0; \
|
||||||
++i; \n\
|
while (i < len) { \
|
||||||
} \n\
|
retval.push_back(y[i]); \
|
||||||
retval; \n\
|
++i; \
|
||||||
} \n\
|
} \
|
||||||
def take(container, num) : call_exists(range, container) { \n\
|
retval; \
|
||||||
var r = range(container); \n\
|
} \
|
||||||
var i = num; \n\
|
def take(container, num) : call_exists(range, container) { \
|
||||||
var retval = Vector(); \n\
|
var r = range(container); \
|
||||||
while ((i > 0) && (!r.empty())) { \n\
|
var i = num; \
|
||||||
retval.push_back(r.front()); \n\
|
var retval = Vector(); \
|
||||||
r.pop_front(); \n\
|
while ((i > 0) && (!r.empty())) { \
|
||||||
--i; \n\
|
retval.push_back(r.front()); \
|
||||||
} \n\
|
r.pop_front(); \
|
||||||
retval \n\
|
--i; \
|
||||||
} \n\
|
} \
|
||||||
def take_while(container, f) : call_exists(range, container) { \n\
|
retval; \
|
||||||
var r = range(container); \n\
|
} \
|
||||||
var retval = Vector(); \n\
|
def take_while(container, f) : call_exists(range, container) { \
|
||||||
while ((!r.empty()) && f(r.front())) { \n\
|
var r = range(container); \
|
||||||
retval.push_back(r.front()); \n\
|
var retval = Vector(); \
|
||||||
r.pop_front(); \n\
|
while ((!r.empty()) && f(r.front())) { \
|
||||||
} \n\
|
retval.push_back(r.front()); \
|
||||||
retval \n\
|
r.pop_front(); \
|
||||||
} \n\
|
} \
|
||||||
def drop(container, num) : call_exists(range, container) { \n\
|
retval; \
|
||||||
var r = range(container); \n\
|
} \
|
||||||
var i = num; \n\
|
def drop(container, num) : call_exists(range, container) { \
|
||||||
var retval = Vector(); \n\
|
var r = range(container); \
|
||||||
while ((i > 0) && (!r.empty())) { \n\
|
var i = num; \
|
||||||
r.pop_front(); \n\
|
var retval = Vector(); \
|
||||||
--i; \n\
|
while ((i > 0) && (!r.empty())) { \
|
||||||
} \n\
|
r.pop_front(); \
|
||||||
while (!r.empty()) { \n\
|
--i; \
|
||||||
retval.push_back(r.front()); \n\
|
} \
|
||||||
r.pop_front(); \n\
|
while (!r.empty()) { \
|
||||||
} \n\
|
retval.push_back(r.front()); \
|
||||||
retval \n\
|
r.pop_front(); \
|
||||||
} \n\
|
} \
|
||||||
def drop_while(container, f) : call_exists(range, container) { \n\
|
retval; \
|
||||||
var r = range(container); \n\
|
} \
|
||||||
var retval = Vector(); \n\
|
def drop_while(container, f) : call_exists(range, container) { \
|
||||||
while ((!r.empty())&& f(r.front())) { \n\
|
var r = range(container); \
|
||||||
r.pop_front(); \n\
|
var retval = Vector(); \
|
||||||
} \n\
|
while ((!r.empty())&& f(r.front())) { \
|
||||||
while (!r.empty()) { \n\
|
r.pop_front(); \
|
||||||
retval.push_back(r.front()); \n\
|
} \
|
||||||
r.pop_front(); \n\
|
while (!r.empty()) { \
|
||||||
} \n\
|
retval.push_back(r.front()); \
|
||||||
retval \n\
|
r.pop_front(); \
|
||||||
} \n\
|
} \
|
||||||
def reduce(container, func) : container.size() >= 2 && call_exists(range, container) { \n\
|
retval; \
|
||||||
var r = range(container); \n\
|
} \
|
||||||
var retval = r.front(); \n\
|
def reduce(container, func) : container.size() >= 2 && call_exists(range, container) { \
|
||||||
r.pop_front(); \n\
|
var r = range(container); \
|
||||||
retval = func(retval, r.front()); \n\
|
var retval = r.front(); \
|
||||||
r.pop_front(); \n\
|
r.pop_front(); \
|
||||||
while (!r.empty()) { \n\
|
retval = func(retval, r.front()); \
|
||||||
retval = func(retval, r.front()); \n\
|
r.pop_front(); \
|
||||||
r.pop_front(); \n\
|
while (!r.empty()) { \
|
||||||
} \n\
|
retval = func(retval, r.front()); \
|
||||||
retval \n\
|
r.pop_front(); \
|
||||||
} \n\
|
} \
|
||||||
def join(container, delim) { \n\
|
retval; \
|
||||||
var retval = \"\" \n\
|
} \
|
||||||
var range = range(container) \n\
|
def join(container, delim) { \
|
||||||
if (!range.empty()) { \n\
|
var retval = ""; \
|
||||||
retval += to_string(range.front()) \n\
|
var range = range(container); \
|
||||||
range.pop_front() \n\
|
if (!range.empty()) { \
|
||||||
while (!range.empty()) { \n\
|
retval += to_string(range.front()); \
|
||||||
retval += delim \n\
|
range.pop_front(); \
|
||||||
retval += to_string(range.front()) \n\
|
while (!range.empty()) { \
|
||||||
range.pop_front() \n\
|
retval += delim; \
|
||||||
} \n\
|
retval += to_string(range.front()); \
|
||||||
} \n\
|
range.pop_front(); \
|
||||||
retval \n\
|
} \
|
||||||
} \n\
|
} \
|
||||||
def filter(container, f) : call_exists(range, container) { \n\
|
retval; \
|
||||||
var retval = Vector(); \n\
|
} \
|
||||||
var r = range(container); \n\
|
def filter(container, f) : call_exists(range, container) { \
|
||||||
while (!r.empty()) { \n\
|
var retval = Vector(); \
|
||||||
if (f(r.front())) { \n\
|
var r = range(container); \
|
||||||
retval.push_back(r.front()); \n\
|
while (!r.empty()) { \
|
||||||
} \n\
|
if (f(r.front())) { \
|
||||||
r.pop_front(); \n\
|
retval.push_back(r.front()); \
|
||||||
} \n\
|
} \
|
||||||
retval \n\
|
r.pop_front(); \
|
||||||
} \n\
|
} \
|
||||||
def generate_range(x, y) { \n\
|
retval; \
|
||||||
var i = x; \n\
|
} \
|
||||||
var retval = Vector(); \n\
|
def generate_range(x, y) { \
|
||||||
while (i <= y) { \n\
|
var i = x; \
|
||||||
retval.push_back(i); \n\
|
var retval = Vector(); \
|
||||||
++i; \n\
|
while (i <= y) { \
|
||||||
} \n\
|
retval.push_back(i); \
|
||||||
retval \n\
|
++i; \
|
||||||
} \n\
|
} \
|
||||||
def collate(x, y) { \n\
|
retval; \
|
||||||
[x, y] \n\
|
} \
|
||||||
} \n\
|
def collate(x, y) { \
|
||||||
def zip_with(f, x, y) : call_exists(range, x) && call_exists(range, y) { \n\
|
[x, y]; \
|
||||||
var r_x = range(x); \n\
|
} \
|
||||||
var r_y = range(y); \n\
|
def zip_with(f, x, y) : call_exists(range, x) && call_exists(range, y) { \
|
||||||
var retval = Vector(); \n\
|
var r_x = range(x); \
|
||||||
while (!r_x.empty() && !r_y.empty()) { \n\
|
var r_y = range(y); \
|
||||||
retval.push_back(f(r_x.front(), r_y.front())); \n\
|
var retval = Vector(); \
|
||||||
r_x.pop_front(); \n\
|
while (!r_x.empty() && !r_y.empty()) { \
|
||||||
r_y.pop_front(); \n\
|
retval.push_back(f(r_x.front(), r_y.front())); \
|
||||||
} \n\
|
r_x.pop_front(); \
|
||||||
retval \n\
|
r_y.pop_front(); \
|
||||||
} \n\
|
} \
|
||||||
def zip(x, y) { \n\
|
retval; \
|
||||||
zip_with(collate, x, y) \n\
|
} \
|
||||||
}\n";
|
def zip(x, y) { \
|
||||||
|
zip_with(collate, x, y); \
|
||||||
|
}\
|
||||||
|
)
|
||||||
|
|
||||||
#endif /* CHAISCRIPT_PRELUDE_HPP_ */
|
#endif /* CHAISCRIPT_PRELUDE_HPP_ */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user