Make the prelude string a bit more manageable

This commit is contained in:
Jason Turner 2009-07-07 00:21:19 +00:00
parent 2c5b1323dd
commit 36208b401e

View File

@ -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_ */