aboutsummaryrefslogtreecommitdiff
path: root/examples/fib.c
diff options
context:
space:
mode:
authorAleksey Veresov <aleksey@veresov.pro>2021-01-02 19:24:13 +0300
committerAleksey Veresov <aleksey@veresov.pro>2021-01-02 19:24:13 +0300
commit0c32a26c9a43b2d45968b9ac59b8916c1d4092d1 (patch)
treeba7d6ef7f3749a42a6118c35996f2931aa4f83e2 /examples/fib.c
parent6b08e86c9a16bfac5a208a04926dcc66b861a096 (diff)
downloadcsx-0c32a26c9a43b2d45968b9ac59b8916c1d4092d1.tar
csx-0c32a26c9a43b2d45968b9ac59b8916c1d4092d1.tar.xz
csx-0c32a26c9a43b2d45968b9ac59b8916c1d4092d1.zip
.
Diffstat (limited to 'examples/fib.c')
-rw-r--r--examples/fib.c50
1 files changed, 50 insertions, 0 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;
+}