逆引きxyzzy lisp(データ型) - circleratio/xyzzy GitHub Wiki
(defvar x 10 "test")
=> x
x
=> 10
(symbol-plist 'x)
=> (lisp::variable-documentation "test")
(defun get-x ()
x)
=>get-x
(get-x)
=> 10
スペシャル変数はダイナミックスコープになるので注意。
(let ((x 100))
(get-x))
=> 100
スペシャル変数の一種。
(defconstant *const* 100)
=> *const*
(setq *const* 10)
=> 定数は変更できません: *const*
Common Lisp の構造体は、データ型だけでなく、コンストラクタやアクセス関数も自動的に生成する。
(defstruct struct-test
(a 10)
(b 20)
c)
=> #<structure-definition: struct-test>
defstruct はデータ型の定義と必要な関数の定義を行うが、実際にデータを生成するわけではないので注意。
(setq mst (make-struct-test))
=> #S(struct-test a 10 b 20 c nil)
(setq mst (make-struct-test :a 0 :b 1 :c 2 ))
=> #S(struct-test a 0 b 1 c 2)
(struct-test-a mst)
=> 0
(setf (struct-test-a mst) -1)
=> -1
(struct-test-a mst)
=> -1
(setq mst2 (copy-struct-test mst))
=> #S(struct-test a -1 b 1 c 2)
(setq mst1 (make-struct-test :a 0 :b 1 :c 2 ))
=> #S(struct-test a 0 b 1 c 2)
(setq mst2 (make-struct-test :a 0 :b 1 :c 2 ))
=> #S(struct-test a 0 b 1 c 2)
(eql mst1 mst2)
=>nil
(equal mst1 mst2)
=> nil
(equalp mst1 mst2)
=> t
(defun print-symbol (sym)
(when (or (fboundp sym) (boundp sym))
(insert "\n")
(insert (format nil "~A ~A ~S"
(if (fboundp sym) "関数" " ")
(if (boundp sym) "変数" " ")
sym))))
(do-symbols (i)
(print-symbol i))