{"id":13760559,"url":"https://github.com/ruricolist/cloture","last_synced_at":"2026-02-16T03:34:54.566Z","repository":{"id":43843648,"uuid":"217192611","full_name":"ruricolist/cloture","owner":"ruricolist","description":"Clojure in Common Lisp","archived":false,"fork":false,"pushed_at":"2024-12-02T20:32:16.000Z","size":896,"stargazers_count":377,"open_issues_count":9,"forks_count":9,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-05-10T11:33:50.307Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruricolist.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null}},"created_at":"2019-10-24T02:16:37.000Z","updated_at":"2025-05-05T23:38:10.000Z","dependencies_parsed_at":"2022-09-14T07:00:46.956Z","dependency_job_id":"d81e55a7-a315-4fcc-ba0a-c21d9cf578be","html_url":"https://github.com/ruricolist/cloture","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ruricolist/cloture","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruricolist%2Fcloture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruricolist%2Fcloture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruricolist%2Fcloture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruricolist%2Fcloture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruricolist","download_url":"https://codeload.github.com/ruricolist/cloture/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruricolist%2Fcloture/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29499615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T02:07:14.481Z","status":"online","status_checked_at":"2026-02-16T02:03:22.852Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":true,"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":[],"created_at":"2024-08-03T13:01:12.952Z","updated_at":"2026-02-16T03:34:54.541Z","avatar_url":"https://github.com/ruricolist.png","language":"Common Lisp","funding_links":[],"categories":["Common Lisp","Clojure"],"sub_categories":[],"readme":"# Cloture\n\nCloture is an implementation of Clojure in Common Lisp. It is designed above all to interoperate well with Common Lisp; Clojure is read by the Lisp reader and Clojure namespaces are Lisp packages.\n\nCloture is in very early (pre-alpha) stages, but it has progressed far enough to load [clojure.test][], allowing the [test suite][] to actually be written in Clojure.\n\nWork so far has been focused on the critical path to get real Clojure code working in CL. But if there is interest from Clojurists I may work toward making it a more complete Clojure implementation.\n\n## Clojure vs. ClojureScript\n\nCloture is closer to Clojure than to ClojureScript. Among other things, the plan is to support Clojure’s concurrency primitives (`atom`, `ref`, `agent`, `future`, `promise`). However, Cloture follows ClojureScript in making exclusive use of protocols - interfaces are not used or supported. Protocol names are also derived from ClojureScript.\n\nLike ClojureScript, Cloture supports `(catch :default)` to catch everything.\n\n## A note about FSet\n\nCloture uses [FSet][] seqs, maps, and sets to implement Clojure vectors, maps, and sets, respectively. This involves [a few hacks][fset-hacks] to FSet that might possibly affect other programs using FSet.\n\n## Starting a REPL\n\nUse `(cloture:repl)` to start a Clojure REPL. You can exit the REPL with `(quit)` or `(exit)`.\n\nNote that not much work has been done yet on Clojure-style printing, so the “Print” in REPL is still mostly the Common Lisp printer.\n\n## Interoperation\n\n### Using Clojure from Lisp\n\nThe design goal of Cloture is to keep things as close to Common Lisp as possible: Clojure is read by the Lisp reader and Clojure namespaces are just packages. Clojure packages and functions, however, usually have lower-case names, so to call them from Lisp you will need to quote them with pipe characters:\n\n    (|clojure.core|:|cons| 1 '(2))\n    =\u003e '(1 2)\n\nLisp’s nil is used only as the empty list; Clojure nil, true, and false are singletons. To use Clojure predicates from Lisp, you can use `cloture:truthy?` to translate.\n\n    (cloture:truthy? (|clojure.core|:|=| '(1 2 3) #(1 2 3)))\n    =\u003e T\n\nIn this case, however, you should use `cloture:egal`, which tells you if two objects are equal according to Clojure’s idea of equality.\n\nCloture exports Iterate drivers for working with collections that satisfy Clojure protocols:\n\n- `cloture:in-seq` iterates over `ISeq`.\n- `cloture:on-seq` iterates over the rests of `ISeq`.\n- `cloture:in-indexed` iterates over `IIndexed`.\n- `cloture:index-of-indexed` iterates over the indices of `IIndexed`.\n\nClojure files can be integrated into Lisp systems by making the system definition depend on Cloture `(:defsystem-depends-on (\"cloture\")` and using `\"cloture:cljc\"` as the file type.\n\n    (defsystem ...\n      :defsystem-depends-on (\"cloture\")\n      :components ((:file \"cloture:cljc\" \"my-clojure-code\")))\n\nYou can also use `\"cloture:clj\"` or `\"cloture:cljs\"` to load straight Clojure or ClojureScript files. Using `.cljc` is recommended, however.\n\n### Using Lisp from Clojure\n\nSince Clojure uses the Lisp reader, you can call Lisp functions just by uppercasing them.\n\n    (letfn [(fst [xs] (CL:FIRST xs))]\n      (fst '(1 2 3)))\n\nYou will also need to spell out `CL:QUOTE` and `CL:FUNCTION` (or refer them), as Clojure quote is not the same thing as CL quote and sharp-quote is used in Clojure for a different purpose.\n\n    (ns ...\n      (:require [CL :refer [QUOTE FUNCTION]]))\n\nCloture defines a Clojure namespace, `cloture`, with exports whose names (and keyword arguments!) are already conveniently lowercased and otherwise follow Clojure conventions:\n\n    (ns ...\n      (:require [cloture:refer [parse-integer]]))\n\n    (parse-integer \"1234x\" :start 1 :junk-allowed true)\n    =\u003e 234\n\nAll Lisp sequences (lists, vectors, and extensible sequences on implementations that support them) implement ISeq.\n\n## Reader conditionals\n\nIn reader conditionals in `.cljc` files (and at the REPL), Cloture looks for a `:cl` key.\n\n## License\n\n[Eclipse Public License][EPL].\n\n## Why?\n\nI would like to be able to use Clojure libraries from Common Lisp.\n\n## Why “Cloture”?\n\nBeside the obvious: [cloture][] is a parliamentary procedure to end debate on a subject, and I would like to end certain debates. Yes, Common Lisp is “modern.” Yes, Clojure is a Lisp.\n\n[Clozure]: https://ccl.clozure.com/docs/ccl.html\n[cloture]: https://en.wikipedia.org/wiki/Cloture\n[EPL]: https://opensource.org/licenses/EPL-1.0\n[ClojureScript]: https://clojurescript.org/\n[FSet]: https://github.com/slburson/fset\n[fset-hacks]: https://github.com/ruricolist/cloture/blob/master/fset-hacks.lisp\n[clojure.test]: https://github.com/ruricolist/cloture/blob/master/clojure/test.cljc\n[test suite]: https://github.com/ruricolist/cloture/blob/master/t/cloture-tests.cljc\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruricolist%2Fcloture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruricolist%2Fcloture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruricolist%2Fcloture/lists"}