逆引き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))
⚠️ **GitHub.com Fallback** ⚠️