3 ms·
Show HN: YakshaLisp – Lisp dialect and macros for Yaksha lang
YakshaLisp is a sub-language embedded in Yaksha compiler.
Allowing you to do things like below. See the link for updated documentation.
What is your opinion about lisp dialect for defining macros in a off-side rule language?
# ╔═╗┌─┐┌┬┐┌─┐┬┬ ┌─┐ ╔╦╗┬┌┬┐┌─┐
# ║ │ ││││├─┘││ ├┤ ║ ││││├┤
# ╚═╝└─┘┴ ┴┴ ┴┴─┘└─┘ ╩ ┴┴ ┴└─┘
# ╔═╗┬┌─┐┌─┐ ╔╗ ┬ ┬┌─┐┌─┐
# ╠╣ │┌─┘┌─┘ ╠╩╗│ │┌─┘┌─┘
# ╚ ┴└─┘└─┘ ╚═╝└─┘└─┘└─┘
macros!{
(defun to_fb (n) (+ (if (== n 1) "" " ") (cond
((== 0 (modulo n 15)) "FizzBuzz")
((== 0 (modulo n 3)) "Fizz")
((== 0 (modulo n 5)) "Buzz")
(true (to_string n))
)))
(defun fizzbuzz () (list (yk_create_token YK_TOKEN_STRING (reduce + (map to_fb (range 1 101))))))
(yk_register {dsl fizzbuzz fizzbuzz})
}
def main() -> int:
println(fizzbuzz!{})
return 0
This is available in latest release - https://github.com/YakshaLang/Yaksha/releases/tag/v0.0.4 https://github.com/YakshaLang/Yaksha/releases/tag/v0.0.4
(I recommend using release.py in compiler/scripts if you want to locally compile it)
- JaDogg 3y agoFew more examples: - embedding a text file macros! { (defun load_string (file) (list (yk_create_token YK_TOKEN_STRING (io_read_file (map_get file "value"))))) (yk_register {dsl load_string load_string}) } def main() -> int: println(load_string!{"test.txt"}) return 0 - importing a macro import import_me as magic def main() -> int: println(magic.counter!{}) println(magic.counter!{}) println(magic.counter!{}) return 0