{"id":17457803,"url":"https://github.com/iconmaster5326/ithaca","last_synced_at":"2025-03-28T05:26:19.901Z","repository":{"id":72130229,"uuid":"132665174","full_name":"iconmaster5326/Ithaca","owner":"iconmaster5326","description":"Ithaca Lisp - A new Lisp, redesigned from the ground up","archived":false,"fork":false,"pushed_at":"2018-05-13T00:31:23.000Z","size":141,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-02T06:26:08.821Z","etag":null,"topics":["ithaca","ithaca-lisp","language","lisp","programming-language","scheme"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iconmaster5326.png","metadata":{"files":{"readme":"README.md","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":"2018-05-08T21:06:47.000Z","updated_at":"2018-05-13T00:31:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"c1982c7f-1158-4960-8731-f6dc2f21df78","html_url":"https://github.com/iconmaster5326/Ithaca","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iconmaster5326%2FIthaca","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iconmaster5326%2FIthaca/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iconmaster5326%2FIthaca/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iconmaster5326%2FIthaca/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iconmaster5326","download_url":"https://codeload.github.com/iconmaster5326/Ithaca/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245976517,"owners_count":20703480,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["ithaca","ithaca-lisp","language","lisp","programming-language","scheme"],"created_at":"2024-10-18T03:06:21.776Z","updated_at":"2025-03-28T05:26:19.873Z","avatar_url":"https://github.com/iconmaster5326.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ithaca\n**Ithaca Lisp** (Usually just **Ithaca** for short) is a new, radical dialect of Lisp/Scheme that aims to improve the language through fundamental alterations in syntax and style. It most heavily borrows from Scheme (Ithaca is simple, single-namespaced, etc) but is not a direct dialect of it.\n\nThis repository contains a reference implementation of Ithaca Lisp, as well as documents detailing the Ithaca language standard.\n\n## Why Ithaca?\n\nIt's where I live.\n\n## Why Make Ithaca?\n\nLisp has many desirable and/or interesting properties for a programming language... But it's old. It's one of the oldest languages out there. It's developed a layer of crust that impedes normal programming in the language. Ithaca Lisp throws off the shackles of the ancients, allowing you to write programs quickly and readably.\n\n## What Changes Are We Talking About?\n\nHere's a short list:\n* Many functions have been renamed so their names actually make sense. `lambda` is `func`, `car` is `head`, `cdr` is `tail`, just to name a few.\n* There is only one `let`, which works like the best of all `let`s: Names are bound, then values are evaluated and given to the names in sequence.\n* Multiple returns are gone! Why? Because when you want to obtain multiple values from a function, it's often a pain to do so. Just return a list instead. Plus, it lets us simplify the syntax of stuff like `let` in neat ways.\n* Generic functions are the norm! At one time, you had many functions to do one thing- If you want to find the length of something, there's `length`, `vector-length`, `string-length`... The list goes on. Now, `length` just plain works on all those data types.\n* User-defined data types are first-class citizens of Ithaca. No longer are the days of struggling to make sure your custom data types print, hash, or test for equality right.\n\n## Examples?\n\nYes.\n\n```lisp\n;; Here we define a functional stream - Essentially, A list that generates values on command.\n(define/type \u003cstream\u003e)\n\n(define (stream? x)\n  (is? x \u003cstream\u003e)\n)\n\n(define/macro (stream . body)\n  `(new \u003cstream\u003e (func () ,@body))\n)\n\n(define head (let (super head) (func (x)\n  (if (stream? x)\n    (head ((get-value x)))\n    (super x)\n  )\n)\n\n(define tail (let (super head) (func (x)\n  (if (stream? x)\n    (tail ((get-value x)))\n    (super x)\n  )\n)\n\n(define (print-stream s)\n  (while s\n    (let ((val next) ((get-value x)))\n      (print val)\n      (set! s next)\n    )\n  )\n)\n\n; prints 0 then 1 then 2\n(print-stream (stream (pair 0 (stream (pair 1 (stream (pair 2 #f)))))))\n\n;; Here we define a promise - essentially, a cachable value.\n(define/type \u003cpromise\u003e)\n\n(define/macro (delay . body)\n  (let (forced? (symbol) value (symbol))\n  `(let (,forced? #f ,value #v)\n     (new \u003cpromise\u003e (func ()\n        (unless ,forced?\n          (set! ,forced? #t)\n          (set! ,value (begin @,body))\n        )\n        ,value\n     ))\n    )\n  )\n)\n\n(define (force p)\n  ((get-value p))\n)\n\n; prints Hello, World only once.\n(define hello (delay (print \"Hello, World!\") #v))\n(force hello)\n(force hello)\n(force hello)\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficonmaster5326%2Fithaca","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ficonmaster5326%2Fithaca","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficonmaster5326%2Fithaca/lists"}