lisp

実践Common lispの最初に載ってるサンプルコード

QiitaとrubyとCommon lisp初心者です!!

rubyっぽい書き方したくてRubyソースコード完全解説読んでて疲れてきたので箸休めに実践Common lisp 英語で書いてるweb版読んでてとりあえず最初の方のDB作成とイテレートのプログラムを写経してみた

動作環境が手元に無いのでdankogaiのevalできるサイトで動かした

defunが関数定義
dolistはrubyの.each do

他は雰囲気で読めるけど、formatが分かりづらかったのでCommon Lispのformat関数のディレクティブを俯瞰する。
中級の書式文字列 を参考にした

~{ ... ~} がイテレート、~aが変数の出力、~10tは10回空白を出力、~%は改行、って感じ

#!/usr/local/bin/sbcl --script


(defun make-cd (title artist rating ripped)
  (list :title title :artist artist :rating rating :ripped ripped))

(defvar *db* nil)
(defun add-record (cd) (push cd *db*))

(add-record (make-cd "Roses" "Kathy Mattea" 7 t))
(add-record (make-cd "Fly" "Dixie Chicks" 8 t))
(add-record (make-cd "Home" "Dixie Chicks" 9 t))

(defun dump-db ()
  (dolist (cd *db*)
    (format t "~{~a:~10t~a~%~}~%" cd)))

(dump-db)