Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: YakshaLisp – Lisp dialect and macros for Yaksha lang (yakshalang.github.io)
2 points by JaDogg on July 30, 2023 | hide | past | favorite | 1 comment
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 (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




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: