aboutsummaryrefslogtreecommitdiff
path: root/examples/strfib.c
diff options
context:
space:
mode:
authorAleksey Veresov <aleksey@veresov.pro>2020-09-28 04:59:07 +0300
committerAleksey Veresov <aleksey@veresov.pro>2020-09-28 04:59:07 +0300
commit6b08e86c9a16bfac5a208a04926dcc66b861a096 (patch)
treed0aa6b84d1d0bd62268434187d12f7bf02397030 /examples/strfib.c
parentaee665f2bc7d66d5e6ecb1e31f9e2ccf614c7fa2 (diff)
downloadcsx-6b08e86c9a16bfac5a208a04926dcc66b861a096.tar
csx-6b08e86c9a16bfac5a208a04926dcc66b861a096.tar.xz
csx-6b08e86c9a16bfac5a208a04926dcc66b861a096.zip
Something...
Diffstat (limited to 'examples/strfib.c')
-rw-r--r--examples/strfib.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/examples/strfib.c b/examples/strfib.c
new file mode 100644
index 0000000..6e22c7f
--- /dev/null
+++ b/examples/strfib.c
@@ -0,0 +1,53 @@
+#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;
+}