diff options
author | Aleksey Veresov <aleksey@veresov.pro> | 2021-01-02 19:24:13 +0300 |
---|---|---|
committer | Aleksey Veresov <aleksey@veresov.pro> | 2021-01-02 19:24:13 +0300 |
commit | 0c32a26c9a43b2d45968b9ac59b8916c1d4092d1 (patch) | |
tree | ba7d6ef7f3749a42a6118c35996f2931aa4f83e2 /examples | |
parent | 6b08e86c9a16bfac5a208a04926dcc66b861a096 (diff) | |
download | csx-0c32a26c9a43b2d45968b9ac59b8916c1d4092d1.tar csx-0c32a26c9a43b2d45968b9ac59b8916c1d4092d1.tar.xz csx-0c32a26c9a43b2d45968b9ac59b8916c1d4092d1.zip |
.
Diffstat (limited to 'examples')
-rw-r--r-- | examples/fib.c | 50 | ||||
-rw-r--r-- | examples/strfib.c | 53 |
2 files changed, 50 insertions, 53 deletions
diff --git a/examples/fib.c b/examples/fib.c new file mode 100644 index 0000000..0c94673 --- /dev/null +++ b/examples/fib.c @@ -0,0 +1,50 @@ +#include <csx.h> +#include <stdio.h> + + +static csx_list_fn *l; +static csx_num_fn *n; + +char *define; +char *fn; +char *pair; +char *head; +char *tail; +char *not; +char *csx_if; +char *inc; +char *sum; +char *diff; + +void process() +{ + char *fib = csx_name("fib"); + char *num = csx_name("num"); + csx_eval(l(define, fib, l(fn, l(num, 0), + l(csx_if, l(inc, num, n(2), 0), n(1), + l(sum, + l(fib, l(diff, num, n(1), 0), 0), + l(fib, l(diff, num, n(2), 0), 0), + 0), + 0), + 0), 0)); + printf("fib 6 = %d\n", *(int *)csx_eval(l(fib, n(6), 0))); +} + +int main() +{ + l = csx_list; + n = csx_num; + define = csx_name("define"); + fn = csx_name("fn"); + pair = csx_name("pair"); + head = csx_name("head"); + tail = csx_name("tail"); + not = csx_name("not"); + csx_if = csx_name("if"); + inc = csx_name("inc"); + sum = csx_name("sum"); + diff = csx_name("diff"); + process(); + return 0; +} diff --git a/examples/strfib.c b/examples/strfib.c deleted file mode 100644 index 6e22c7f..0000000 --- a/examples/strfib.c +++ /dev/null @@ -1,53 +0,0 @@ -#include <csx/csx.h> -#include <stdio.h> - - -static csx_type_function_list *l; -static csx_type_function_string *s; -static csx_type_function_atom *a; -static csx_type_function_evaluate *e; - -static char *append; -static char *define; -static char *cdr; -static char *ifx; -static char *not; - -void printfibs(char *strfib) -{ - const char *input = "oooooooooo" + 9; - int i; - for (i = 0; i != 10; ++i) - puts(e(l(strfib, s(input - i), 0))); -} - -void process() -{ - char *strfib = a("strfib"); - char *n = a("n"); - e(l(define, l(strfib, n, 0), - l(ifx, l(not, n, 0), s(""), - l(ifx, l(not, l(cdr, n, 0), 0), s("o"), - l(append, l(strfib, l(cdr, n, 0), 0), - l(strfib, l(cdr, l(cdr, n, 0), 0), 0), 0), - 0), - 0), - 0)); - printfibs(strfib); -} - -int main() -{ - l = csx_list; - s = csx_string; - a = csx_atom; - e = csx_evaluate; - append = a("append"); - define = a("define"); - cdr = a("cdr"); - ifx = a("ifx"); - not = a("not"); - process(); - csx_free(); - return 0; -} |