Allowing you to do things like below (fizzbuzz).
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 (I recommend using release.py in compiler/scripts if you want to locally compile it)Few 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
Looking for ideas/advice/criticism :)