LINUX.ORG.RU

lisp, деструктивная функция


0

0

имею функцию

(defun sorta (a)
  (let ((old a))
  (sort old #'(lambda (x y) (if (< x y) t)))))

после ее выполнения получаю отсортированный список a, 
вот собственно почему, old должна быть локальной и 
никак с a не связанной, почему такая фигня происходит?

Re: lisp, деструктивная функция

copy-list?

yyk ★★★★★ ()
Ответ на: Re: lisp, деструктивная функция от kozebuk

Re: lisp, деструктивная функция

> наверно потомушта old - не копия списка а, а ссылка на него

Именно. let, насколько я помню, только связывает символ с имеющимся значением, без копирования.

Вот, почитай: http://www.psg.com/~dlamkins/sl/chapter03-06.html

slav ★★ ()

Re: lisp, деструктивная функция

Все очень просто, let -- это синтаксический сахар:

(defun sorta (a)
  (funcall #'(lambda (old)
    (sort old  #'(lambda (x y) (if (< x y) t))))
  a))

swizard ()

Re: lisp, деструктивная функция

old - это локальная копия начала списка a, т.е. указатель на a.

omerm ()

Re: lisp, деструктивная функция

блин понятно, спаисбо всем

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