Search code examples
common-lispsbclquicklispasdf

How to find all available systems?


There are good functions I use to study Common Lisp projects:

CL-USER> (list-all-packages)
CL-USER> (describe (asdf:find-system "asdf"))

How to list all systems know for asdf, quicklisp or sbcl? I've tried to dig it from documentation but did not find it yet.


Solution

  • All systems registered in ASDF:

    (asdf:registered-systems)
    

    I found that one by typing asdf:systems and letting auto-completion suggests a name. The symbol is exported, so it is fair game. Apparently it is undocumented.

    Quicklisp has a notion of distributions, dists.

    (ql-dist:all-dists)
    

    Each dist has different versions (http://blog.quicklisp.org/2011/08/going-back-in-dist-time.html):

    (ql-dist:available-versions (ql-dist:dist "quicklisp"))
    

    Each dist provides systems:

    (ql-dist:provided-systems (ql-dist:dist "quicklisp"))
    

    Each system has a release, you can list all releases:

    (ql-dist:provided-releases (ql-dist:dist "quicklisp"))
    

    Conforming implementation have a list of *MODULES*, which is useful notably for systems that are available as built-ins by your implementation; for SBCL:

    CL-USER> (require 'sb-mpfr)
    ("SB-MPFR" "SB-GMP")
    
    CL-USER> *modules*
    ("SB-GMP" "SB-MPFR" ...)