{"id":13442877,"url":"https://github.com/google/lisp-koans","last_synced_at":"2026-01-30T05:34:14.463Z","repository":{"id":8471003,"uuid":"10070738","full_name":"google/lisp-koans","owner":"google","description":"Common Lisp Koans is a language learning exercise in the same vein as the ruby koans, python koans and others.   It is a port of the prior koans with some modifications to highlight lisp-specific features.  Structured as ordered groups of broken unit tests, the project guides the learner progressively through many Common Lisp language features. ","archived":false,"fork":false,"pushed_at":"2023-04-14T13:37:55.000Z","size":332,"stargazers_count":3177,"open_issues_count":5,"forks_count":572,"subscribers_count":126,"default_branch":"master","last_synced_at":"2026-01-23T15:29:01.301Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.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}},"created_at":"2013-05-15T04:07:12.000Z","updated_at":"2026-01-18T19:59:02.000Z","dependencies_parsed_at":"2023-01-11T17:23:59.540Z","dependency_job_id":"70a7c508-38da-4cbb-a909-677d1168b1e1","html_url":"https://github.com/google/lisp-koans","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/google/lisp-koans","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Flisp-koans","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Flisp-koans/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Flisp-koans/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Flisp-koans/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/lisp-koans/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Flisp-koans/sbom","scorecard":{"id":437384,"data":{"date":"2025-08-11","repo":{"name":"github.com/google/lisp-koans","commit":"531ad6bcd4daef831b299c4129caf2eedeb79245"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.2,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/google/.github/SECURITY.md:1","Info: Found linked content: github.com/google/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/google/.github/SECURITY.md:1","Info: Found text in security policy: github.com/google/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T04:59:34.216Z","repository_id":8471003,"created_at":"2025-08-19T04:59:34.217Z","updated_at":"2025-08-19T04:59:34.217Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28906055,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T04:02:34.702Z","status":"ssl_error","status_checked_at":"2026-01-30T04:02:33.562Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":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":[],"created_at":"2024-07-31T03:01:52.576Z","updated_at":"2026-01-30T05:34:14.442Z","avatar_url":"https://github.com/google.png","language":"Common Lisp","readme":"# Lisp Koans\n\n## Getting Started\n\n### One-time Method\n\nFrom a terminal, execute your lisp interpreter on the file 'contemplate.lisp' e.g.\n\n    abcl --noinform --noinit --load contemplate.lisp --eval '(quit)'\n    ccl -n -l contemplate.lisp -e '(quit)'\n    clisp -q -norc -ansi contemplate.lisp\n    ecl -norc -load contemplate.lisp -eval '(quit)'\n    sbcl --script contemplate.lisp\n\n### Watching the Koans\n\nOn Linux and MacOS systems, the shell scripts `meditate-linux.sh` and\n`meditate-macos.sh` can be used to automatically evaluate 'contemplate.lisp'\nwhenever the koan files are modified, providing immediate feedback on changes\nto the koans. To run the MacOS version you need to have\n[`fswatch`](https://github.com/emcrisostomo/fswatch) installed. From a terminal:\n\n    $ cd lisp-koans\n    $ sh meditate-linux.sh # on Linux\n    $ sh meditate-macos.sh # on MacOS\n\n## Results of Contemplation\n\nRunning on a fresh version should output the following:\n\n```\nThinking about ASSERTS\n    FILL-IN-THE-BLANKS requires more meditation.\n\nYou have not yet reached enlightenment.\n    A koan is incomplete.\nPlease meditate on the following code:\n    File \"koans/asserts.lisp\"\n    Koan \"FILL-IN-THE-BLANKS\"\n    Current koan assert status is \"(INCOMPLETE INCOMPLETE INCOMPLETE)\"\n\nYou are now 0/198 koans and 0/31 lessons closer to reaching enlightenment.\n```\n\nThis indicates that the script has completed, and that the learner should look\nto asserts.lisp to locate and fix the problem.  The problem will be within\na define-test expression such as\n\n```lisp\n;;; In order to progress, fill in the blanks, denoted via ____ in source code.\n;;; Sometimes, you will be asked to provide values that are equal to something.\n\n(define-test fill-in-the-blanks\n  (assert-equal ____ 2)\n  (assert-equal ____ 3.14)\n  (assert-equal ____ \"Hello World\"))\n\n;;; Sometimes, you will be asked to say whether something is true or false,\n;;; In Common Lisp, the canonical values for truth and falsehood are T and NIL.\n\n(define-test assert-true\n  (assert-true ____))\n\n(define-test assert-false\n  (assert-false ____))\n```\n\nIn this case, the test is incomplete, and the student should fill\nin the blank (\\_\\_\\_\\_) with appropriate lisp code to make the assert pass.\n\nIn order to test code, or evaluate tests interactively, students may copy\nand paste code into the lisp command line REPL.\n\n### Testing\n\nTo test the koans, execute your lisp interpreter on the file 'contemplate.lisp' e.g.\n\n    abcl --noinform --noinit --load test.lisp --eval '(quit)'\n    ccl -n -l test.lisp -e '(quit)'\n    clisp -q -norc -ansi test.lisp\n    ecl -norc -load test.lisp -eval '(quit)'\n    sbcl --script test.lisp\n\n## Quoting the Ruby Koans instructions\n\n   \"In test-driven development the mantra has always been, red, green,\nrefactor. Write a failing test and run it (red), make the test pass (green),\nthen refactor it (that is look at the code and see if you can make it any\nbetter). In this case you will need to run the koan and see it fail (red), make\nthe test pass (green), then take a moment and reflect upon the test to see what\nit is teaching you and improve the code to better communicate its\nintent (refactor).\"\n\n## Content\n\nThe Common Lisp koans are based on the Python koans and Ruby koans projects.\nAdditionally, many of the tests are based on new material that is special\nto Common Lisp.\n\nNote that the unit on threads uses bordeaux-threads and bt-semaphore.\nThe user must have Quicklisp installed and loaded or a reader macro\nwill remove the instructions to run :threads.\nFor information and instructions on installing Quicklisp\nplease see:\nhttps://www.quicklisp.org/beta/\nThe user can either remove #+quicklisp and uncomment\n(load \"~/.quicklisp/setup.lisp\") in threads.lisp, or  if they know\nquicklisp will be loaded while running contemplate.lisp do nothing.\n","funding_links":[],"categories":["Languages","Common Lisp","Online Books"],"sub_categories":["Other Languages"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Flisp-koans","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Flisp-koans","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Flisp-koans/lists"}