Blog 2020/8/4
<- previous | index | next ->
Here are Janet solutions (recursive and iterative) to the exercism "reverse a string" problem.
The rules are that you are not allowed to use any built-in reverse functions.
| default: test-all bin-all | |
| test-all: test-recur test-iter | |
| test-recur: | |
| ./rev-str-recur.janet | |
| test-iter: | |
| ./rev-str-iter.janet | |
| bin-all: rev-str-recur rev-str-iter | |
| rev-str-recur: rev-str-recur.janet | |
| jpm quickbin rev-str-recur.janet rev-str-recur | |
| rev-str-iter: rev-str-iter.janet | |
| jpm quickbin rev-str-iter.janet rev-str-iter | |
| clean: | |
| rm -f rev-str-recur.c rev-str-recur rev-str-iter rev-str-iter.c | |
| .PHONY: default test-all test-recur test-iter bin-all clean |
| #!/usr/bin/env janet | |
| # reverse a string, without using the built-in reverse functions. | |
| (defn rev-str-iter [s] | |
| (var b @"") | |
| (var i (length s)) | |
| (while (> i 0) | |
| (buffer/push-byte b (get s (- i 1))) | |
| (-- i)) | |
| b) | |
| (defn main [& args] | |
| (print (rev-str-iter "")) | |
| (print (rev-str-iter "a")) | |
| (print (rev-str-iter "ab")) | |
| (print (rev-str-iter "abc"))) |
| #!/usr/bin/env janet | |
| # reverse a string, without using the built-in reverse functions. | |
| # conceptually, what we want is this: | |
| # (defn reverse [s] | |
| # (join (last s) (reverse (all-but-last s)))) | |
| (defn reverse-str [s] | |
| (defn join [& ss] | |
| (string (splice ss))) | |
| (defn last [s] | |
| (string/slice s -2 -1)) | |
| (defn all-but-last [s] | |
| (string/slice s 0 -2)) | |
| (if (= 0 (length s)) | |
| "" | |
| (join (last s) (reverse-str (all-but-last s))))) | |
| (defn main [& args] | |
| (print (reverse-str "")) | |
| (print (reverse-str "a")) | |
| (print (reverse-str "ab")) | |
| (print (reverse-str "abc"))) |