LINUX.ORG.RU

(SETQ x 1) просто сокращение (SET 'x 1)

SETF более общая форма, первым аргументом можно подставлять любое setfable выражение, например (SETF (GETF a b) c)

hbee ★★★★
()
Ответ на: комментарий от hbee

Строго говоря, в Common Lisp'е (SETQ x 1) это не то же что (SET 'x 1), хотя исторически это именно так и было. Более того, SETQ -- это специальная форма, а SET -- обыкновенная функция, причем deprecated: вместо нее полагается использовать (setf (symbol-value sym) val)).

Cуть же в том, что setq может присваивать значения лексическим переменным, а set может только изменять значения символов aka специальные переменные. Т.е.

(let ((x 1)) (set 'x 2) x) == 1

(let ((x 1)) (setq x 2) x) == 2

aa5779
()
Ответ на: комментарий от aa5779

> set может только изменять значения символов aka специальные переменные

Не знал, спасибо. Думаю, можно _везде_ использовать setf и не заморачиваться.

hbee ★★★★
()
Ответ на: комментарий от hbee

SETF можно использовать везде. Я говорил не о SETF а о разнице между (SETQ x 1) и (SET 'x 1).

aa5779
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.