я заметил некоторое несоответствие в выходе этого кода в Clisp
:только для чтения строк в CLISP
(defvar str "Another")
(setf (char str 3) #\!)
Когда я запускаю его из РЕПЛ, я получаю желаемый результат:
[1]> (defvar str "Another")
STR
[2]> (setf (char str 3) #\!)
#\!
[3]> str
"Ano!her"
[4]>
Однако, когда я запускаю его из сценария, я получаю предупреждение об изменении только для чтения строки:
*** - Attempt to modify a read-only string: "Another"
Я получил эту ошибку при выполнении этого кода:
(print (do ((str "foobar")
(i 0 (+ i 1)))
((= i (length str)) str)
(setf (char str i) #\!)))
Какой смысл сделать строку read-only
(я предполагаю, что это то же самое, как immutable
) при связывании будет исчезнут, когда концы блока?
И, почему несоответствие между двумя выходами?
Наконец, есть ли способ отключить его? Я не считаю предупреждение особенно полезным.
Су, что проверка не выполняется в реплике? – Segfault
Нет, только в файлах – sds