My recent theme has been that we should be using artificial intelligence
by ourselves on ourselves, and not using it against other people. Whence
I am going  to start  a second  show building  and exploring  AI  skills
grounded  in common  lisp's CLML on sbcl.  I'm not sure where to put the
corrollary  show yet, but here's  an sh script that runs some sbcl lisp.
If you haven't  already  compiled  CLML, it has lots of dependencies  to
collect and takes a little while to compile.

CLML does exactly the right thing:  Use an alien  interface  to the BLAS
(fortran) algebra in order to in this case do a PCA at reasonable  speed
on a CPU. Principle component analysis (~ eigendecomposition  / singular
values) is useful for exploration  and intuition building, not just as a
gear  in  some  machine   learning.   CLML only  supports   a  few  lisp
distributions, and I will use sbcl.

```sh
## Data
cat > data.sexp <<EOG
(("foo" "bar" "a" "b")
("thing1" "green" 1.0 2.0)
("thing2" "blue" 3.0 4.0)
("thing3" "red" 2.5 2.5)
("thing4" "gray" 1.2 2.9))
EOG

## Principle components
sbcl --dynamic-space-size 2460 <<EOG 2>/dev/null
(require 'asdf)
(require 'clml)

(defpackage :our-test
(:use :cl
      :clml.hjs.meta
      ;:clml.hjs.matrix
      ;:clml.hjs.vector
      clml.hjs.read-data
      ;:clml.statistics
      ;:clml.hjs.vars
      :clml.pca))

(in-package :our-test)

(defun pca-sexp-file (pathstring)
(let ((data (pick-and-specialize-data
             (read-data-from-file pathstring)
             :except
             '(0 1) ; descriptive strings
             :data-types
             (make-list 2 :initial-element :numeric))))
 (princomp data)))

(let ((results (pca-sexp-file "data.sexp")))
(format t "
~@{~{ ~a
~a
~}~}
" (list "components" (components results))
  (list "contributions" (contributions results))
  (list "loading-factors" (loading-factors results))
  (list "pca-method" (pca-method results))))

(terpri)
EOG
```