aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPreston Pan <preston@nullring.xyz>2024-01-20 02:38:26 -0800
committerPreston Pan <preston@nullring.xyz>2024-01-20 02:38:26 -0800
commita9d6c221d7686e3055593359b02125a3f20ab3e5 (patch)
treeea9037ae83c28910f5fddf4844ffbb9563dbf94e
parent640f9a3f5be5528dd4f8ed658cfe4d06d833e4c9 (diff)
add map, filter might work?
-rw-r--r--README.md2
-rw-r--r--examples/stdlib.stem29
-rw-r--r--src/main.c4
-rw-r--r--stemlib/aoc1.stem (renamed from examples/aoc1.stem)0
-rw-r--r--stemlib/fib.stem (renamed from examples/fib.stem)0
-rw-r--r--stemlib/math.stem (renamed from examples/math.stem)0
-rw-r--r--stemlib/repl.stem (renamed from examples/repl.stem)2
-rw-r--r--stemlib/simple.stem (renamed from examples/simple.stem)0
-rw-r--r--stemlib/stdlib.stem60
9 files changed, 64 insertions, 33 deletions
diff --git a/README.md b/README.md
index efea70a..cd1c919 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Introduction {#mainpage}
+# Introduction
Stem aims to be a minimal interpreted stack based programming language
that allows for metaprogramming and a foreign language interface. It features
a C API that is elegant and simple. Additionally, garbage collection is
diff --git a/examples/stdlib.stem b/examples/stdlib.stem
deleted file mode 100644
index df81cd8..0000000
--- a/examples/stdlib.stem
+++ /dev/null
@@ -1,29 +0,0 @@
-evalstr [ strquote eval ] func
-include [ fread evalstr ] func
-
-# Author: Preston Pan
-neg [ 0 swap - ] func
-
-# Author of loop function: Andrei S
-loop [
- swap dup 0 > [
- swap
- dup eval
- swap 1 - swap loop
- ] [ dsc dsc ] if
-] func
-
-# Author: Matthew H
-dupd [ [ dup ] keep ] func
-over [ dupd swap ] func
-dup2 [ over over ] func
-dip2 [ swap [ dip ] dip ] func
-while [ dup2 [ [ ] if ] dip2 over [ while ] [ dsc dsc ] if ] func
-
-loop-times [ dup2 [ swap [ ] if ] dip2
-dup [ 1 - loop-times ] [ dsc dsc ] if ] func
-
-d>base [ [ pow * "" swap ] keep2
-
-[ [ over ] [ [ dup2 / floor * swap over - ] keep [ [ "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "↊" "↋" ] vat swap + ] with dip2 ] while dsc2 dup len(str-len) ] dip
-- dup2 tail [ head "." ] dip + + ] func
diff --git a/src/main.c b/src/main.c
index cbf7f34..9d2d381 100644
--- a/src/main.c
+++ b/src/main.c
@@ -48,8 +48,8 @@ void sigint_handler(int signum) {
int main(int argc, char **argv) {
value_t *v;
- size_t len;
- char *buf;
+ size_t len = 0;
+ char *buf = "";
/* Parsing arguments */
if (argc < 2) {
diff --git a/examples/aoc1.stem b/stemlib/aoc1.stem
index 16f739d..16f739d 100644
--- a/examples/aoc1.stem
+++ b/stemlib/aoc1.stem
diff --git a/examples/fib.stem b/stemlib/fib.stem
index de02b5c..de02b5c 100644
--- a/examples/fib.stem
+++ b/stemlib/fib.stem
diff --git a/examples/math.stem b/stemlib/math.stem
index 1a6f931..1a6f931 100644
--- a/examples/math.stem
+++ b/stemlib/math.stem
diff --git a/examples/repl.stem b/stemlib/repl.stem
index 6ed6795..0131c18 100644
--- a/examples/repl.stem
+++ b/stemlib/repl.stem
@@ -1,6 +1,6 @@
"./stdlib.stem" fread strquote eval
"./math.stem" include
-"You can make your own REPL by changing the code!" dsc
+# You can make your own REPL by changing the code!
repl [ "> " . read strquote eval repl ] func repl
diff --git a/examples/simple.stem b/stemlib/simple.stem
index 5853c3f..5853c3f 100644
--- a/examples/simple.stem
+++ b/stemlib/simple.stem
diff --git a/stemlib/stdlib.stem b/stemlib/stdlib.stem
new file mode 100644
index 0000000..6b2edac
--- /dev/null
+++ b/stemlib/stdlib.stem
@@ -0,0 +1,60 @@
+#!/usr/local/bin/stem
+# Author: Preston Pan
+evalstr [ strquote eval ] func
+include [ fread evalstr ] func
+
+neg [ 0 swap - ] func
+
+# Author of loop function: Andrei S
+loop [
+ swap dup 0 > [
+ swap
+ dup eval
+ swap 1 - swap loop
+ ] [ dsc dsc ] if
+] func
+
+
+swapd [ [ swap ] keep ] func
+swapt [ [ [ swap ] keep ] keep ] func
+
+dscd [ swap dsc ] func
+dsct [ swapd swap dsc ] func
+
+dsc3 [ dsc dsc dsc ] func
+
+# Author: Matthew H
+dupd [ [ dup ] keep ] func
+dupt [ [ [ dup ] keep ] keep ] func
+dupq [ [ [ [ dup ] keep ] keep ] keep ] func
+
+over [ dupd swap ] func
+over2 [ dupt swapd swap ] func
+over3 [ dupq swapt swapd swap ] func
+
+dup2 [ over over ] func
+dup3 [ over2 over2 over2 ] func
+dup4 [ over3 over3 over3 over3 ] func
+
+dip2 [ swap [ dip ] dip ] func
+dip3 [ swap [ dip ] dip ] func
+while [ dup2 [ [ ] if ] dip2 over [ while ] [ dsc dsc ] if ] func
+when [ [ ] if ] func
+
+loop-times [ dup2 [ swap [ ] if ] dip2
+dup [ 1 - loop-times ] [ dsc dsc ] if ] func
+
+
+# d>base [ [ pow * "" swap ] keep2
+
+# [ [ over ] [ [ dup2 / floor * swap over - ] keep [ [ "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "↊" "↋" ] vat swap + ] with dip2 ] while dsc2 dup len(str-len) ] dip
+# - dup2 tail [ head "." ] dip + + ] func
+
+# Author: Preston Pan
+map [ [ ] over2 over2 len 0 swap [ dup4 swap vat over2 eval dscd dscd quote compose swap 1 + dsct dsct dsct over3 swap over3 swap ] swap loop-times dsc3 dscd dscd ] func
+filter [ [ ] over2 over2 len 0 swap [ dup4 swap vat over2 eval dscd dscd [ quote compose ] when swap 1 + dsct dsct dsct over3 swap over3 swap ] swap loop-times dsc3 dscd dscd ] func
+
+# [map][quote][valnew][1]
+
+# [map][quote][val][map][quote][0]
+# [val][map][quote][map][1]