LINUX.ORG.RU

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


0

0

имею функцию

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

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

Ответ на: комментарий от kozebuk

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

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

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

slav ★★
()

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

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

swizard
()

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

omerm
()

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

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