diff --git a/.gitignore b/.gitignore index 648a0c2..5af88f6 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ graalvm/ component/sl-component.jar language/dependency-reduced-pom.xml native/slnative +tmp/ \ No newline at end of file diff --git a/Makefile b/Makefile index 692ff49..440e540 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,12 @@ +all: + ./gradlew clean + ./gradlew distZip + repl: - gradle compileJava && rlwrap java -cp build/classes/java/main/ serene.simple.Main + ./gradlew compileJava && rlwrap java -cp build/classes/java/main/ serene.simple.Main run: - gradle compileJava && java -cp build/classes/java/main/ serene.simple.Main ${PWD}/test.srns + ./gradlew compileJava && java -cp build/classes/java/main/ serene.simple.Main ${PWD}/test.srns docs: npx docco src/**/*.java diff --git a/benchmarks/fib.srns b/benchmarks/fib.srns new file mode 100644 index 0000000..76c3ee6 --- /dev/null +++ b/benchmarks/fib.srns @@ -0,0 +1,8 @@ +(def fib + (fn (n) + (if (< n 2) + 1 + (+ (fib (- n 1)) + (fib (- n 2)))))) + +(println (fib 10)) diff --git a/test.srns b/test.srns new file mode 100644 index 0000000..df247a5 --- /dev/null +++ b/test.srns @@ -0,0 +1,22 @@ +(def reduce + (fn (f xs initial-value) + (cond + ((first xs) (reduce f (rest xs) (f initial-value (first xs)))) + (true initial-value)))) + +(def map + (fn (f xs) + (reduce (fn (acc x) (cons acc (f x))) xs (list)))) + +;; Since SereneSimple only have List data structure and +;; it is effecient from the start. So the following function +;; will return (6 5 4 3 2) +(println (map (fn (x) (+ 1 x)) + (list 1 2 3 4 5))) + + +(println + (reduce (fn (y x) + (cons y (* x x))) + (list 1 2 3 4) + (list)))