sync notes(auto)

This commit is contained in:
Kaz Saita(raspi5) 2024-04-28 13:00:24 +09:00
parent c37151a727
commit 7dee21406a

View file

@ -4,9 +4,15 @@
そもそも・・・
defvar, defparameterはダイナミックスコープの変数(スペシャル変数)を定義する。
letや未定義時のsetfはレキシカルスコープの変数を定義する。
グローバル変数をレキシカルに作る方法は(少なくとも標準的には)無い。 上記未定義時のsetfは期待した動作をするが、推奨されていない。
[[20240428125606 ダイナミックスコープ レキシカルスコープ |ダイナミックスコープ レキシカルスコープ]]
- defvar: 値が定義されていなければ定義する。上書きしようとしても存在している場合はできない。
cf. [lispguide.xml](https://google.github.io/styleguide/lispguide.xml?showone=Global_variables_and_constants#Global_variables_and_constants)
> Common Lisp does not have global lexical variables
- defvar: 値が定義されていなければ定義する。上書きしようとしても存在している場合はできない(というか無視される)。
- defparameter: 定義されているかに関係なく定義する。すでに定義されていたら上書きする。
- defconstant: 定数を定義する。複数回定義しようとしたり、値を変更しようとするとエラーになる。
- setf: 定義された変数を変更するために使う。定義されていない変数を変更しようとすると、新規作成され、警告が出る。
- setq: 使わなくてよい。 setfはsetqの上位互換。