{"id":26702884,"url":"https://github.com/rumenmitov/learning_lisp","last_synced_at":"2026-05-02T13:34:39.498Z","repository":{"id":284344994,"uuid":"954636560","full_name":"rumenmitov/learning_lisp","owner":"rumenmitov","description":"Metaprogramming with ELISP!","archived":false,"fork":false,"pushed_at":"2025-03-25T12:13:24.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-25T12:36:16.347Z","etag":null,"topics":["c","elisp","emacs","macros","metaprogramming","sql"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rumenmitov.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-25T11:42:23.000Z","updated_at":"2025-03-25T12:17:35.000Z","dependencies_parsed_at":"2025-03-25T12:47:14.780Z","dependency_job_id":null,"html_url":"https://github.com/rumenmitov/learning_lisp","commit_stats":null,"previous_names":["rumenmitov/learning_lisp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rumenmitov/learning_lisp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rumenmitov%2Flearning_lisp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rumenmitov%2Flearning_lisp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rumenmitov%2Flearning_lisp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rumenmitov%2Flearning_lisp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rumenmitov","download_url":"https://codeload.github.com/rumenmitov/learning_lisp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rumenmitov%2Flearning_lisp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32536579,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T12:25:33.646Z","status":"ssl_error","status_checked_at":"2026-05-02T12:24:51.733Z","response_time":132,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","elisp","emacs","macros","metaprogramming","sql"],"created_at":"2025-03-27T03:17:30.488Z","updated_at":"2026-05-02T13:34:39.458Z","avatar_url":"https://github.com/rumenmitov.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+title: Learning LISP\n#+author: Rumen Mitov\n\nThe repo title is a bit misleading. The code in here is just me messing around with macros and creating my own syntax for things like:\n- [[https://www.geeksforgeeks.org/generators-in-python/][Generator Expressions]] (they already exist in ELISP, but I made custom syntax for it)\n- C-Scopes\n- SQL\n\n\n*** Examples\n**** Generator Expressions\n#+begin_src emacs-lisp :results output :exports both\n  (load-file \"./generator_expr_macro.el\")\n  (prin1 (gen--expr iterate x thru '(1 2 3) if (\u003e x 2)))\n#+end_src\n\n#+RESULTS:\n: (3)\n\n#+begin_src emacs-lisp :exports both\n  (load-file \"./generator_expr_macro.el\")\n  ;; Example usage when you want to reduce the final list\n  (seq-reduce '+ (mapcar 'apply (gen--expr iterate x thru '(1 2 3 5 6 7 8) if (\u003e x 2) identity)) 0)\n#+end_src\n\n#+RESULTS:\n: 29\n\n**** C-Scopes\n#+begin_src emacs-lisp :results output :exports both\n  (load-file \"./c_scopes_macro.el\")\n  ({\n   (prin1 (+ 1 1))\n   (print \"Hello from C, no wait... this is ELISP!\")\n     })\n#+end_src\n\n#+RESULTS:\n: 2\n: \"Hello from C, no wait... this is ELISP!\"\n\n**** SQL\n#+begin_src emacs-lisp :results output :exports both\n  (load-file \"./sql_macro.el\")\n  (let ((db (sqlite-open)))\n    (prin1 (sql--do :db db :op set CREATE TABLE students(name VARCHAR\\, age INT\\, course VARCHAR)\\;\n  \t   INSERT INTO students(name\\, age\\, course) VALUES(\"rumen\"\\, 20\\, \"cs\")\\;\n  \t   INSERT INTO students(name\\, age\\, course) VALUES(\"kendrick\"\\, 35\\, \"music\")\\;\n  \t   INSERT INTO students(name\\, age\\, course) VALUES(\"rihanna\"\\, 42\\, \"music\")\\;))\n    (print (sql--do :db db :op get SELECT * FROM students\\;)))\n#+end_src\n\n#+RESULTS:\n: t\n: ((\"rumen\" 20 \"cs\") (\"kendrick\" 35 \"music\") (\"rihanna\" 42 \"music\"))\n\n\n*** Testing\nThe unit tests are written with [[https://www.gnu.org/software/emacs/manual/html_mono/ert.html][ERT]] and they are present in each source file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frumenmitov%2Flearning_lisp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frumenmitov%2Flearning_lisp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frumenmitov%2Flearning_lisp/lists"}