Я слабо знаю этот язык, так что сильно не бейте.В C++ была такая возможность:
void f (int *v)
{
v = 5;
}
int a = 1;
f (&a);
После этого a становилось равно 5.
Есть ли в CLisp возможность передать переменную в функцию по ссылке?
Или, к примеру, связать две переменные (так, чтобы изменение содержимого одной изменяло содержимое первой)?
подобный вопрос уже поднимался на форуме:
http://lisper.ru/forum/thread/630
P.S. "CLisp" - конкретная реализация, язык - "Common Lisp" или "CL". )
> подобный вопрос уже поднимался на форуме:> http://lisper.ru/forum/thread/630
Только в обсуждении там какая-то ерунда, а между тем, функцию foo можно было написать как-нибудь так:
(defun foo (l)
(rplaca l (cadr l))
(rplacd l (cddr l)))И всё бы прекрасно работало.
> Есть ли в CLisp возможность передать переменную в функцию по ссылке?В Common Lisp используется
http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing. Фактически, во многих случаях так и происходит (передача по ссылке).
P.S. Код на C++ вам точно больше показывать не стоит, вы всё перепутали.
У меня в библиотеке есть, понадобилось, когда переносил код с другого языка. Реализуется как обёртка и набор макросов.
[code=common lisp]
>(defun ПринятьПоСсылке (параметр)
(with-byref-params (параметр)
(setf параметр 5)))
ПринятьПоСсылке
> (let ((x 4)) (ПринятьПоСсылке (byref x)) x)
5
[/code]
У меня в библиотеке есть, понадобилось, когда переносил код с другого языка. Реализуется как обёртка и набор макросов.
>
(defun ПринятьПоСсылке (параметр)
(with-byref-params (параметр)
(setf параметр 5)))
ПринятьПоСсылке
>
(let ((x 4)) (ПринятьПоСсылке (byref x)) x)
5
библиотека здесь http://code.google.com/p/def-symbol-readmacro/
файл называется http://code.google.com/p/def-symbol-readmacro/source/browse/pass-by-ref.lisp
Правда, загрузка библиотеки пока может вызвать затруднения, но мы над этим работаем и, наверное, вопрос решится в течение месяца.