diff options
author | Preston Pan <preston@nullring.xyz> | 2024-01-20 02:38:26 -0800 |
---|---|---|
committer | Preston Pan <preston@nullring.xyz> | 2024-01-20 02:38:26 -0800 |
commit | a9d6c221d7686e3055593359b02125a3f20ab3e5 (patch) | |
tree | ea9037ae83c28910f5fddf4844ffbb9563dbf94e | |
parent | 640f9a3f5be5528dd4f8ed658cfe4d06d833e4c9 (diff) |
add map, filter might work?
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | examples/stdlib.stem | 29 | ||||
-rw-r--r-- | src/main.c | 4 | ||||
-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.stem | 60 |
9 files changed, 64 insertions, 33 deletions
@@ -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 @@ -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] |