Помогите понять, в чем я неправ и где надо исправить, чтоб заработало :) Значит, имеется следующий код, работающий правильно в CLISP, но не работающий в ELisp по неизвестной мне причине: ;; нужно сделать closure, чтоб бегала по "кольцевому" списку ;; и выдавала текущее значение (defun circulate-list-func (loop-list &optional first-elem) (let ((curr (if (member first-elem loop-list) first-elem (first loop-list)))) (values (lambda () (let ((next (second (member curr loop-list)))) (setq curr (if (null next) (first loop-list) next)))) (lambda () curr)))) ;; проверяем функцию (multiple-value-bind (l1 l2) (circulate-list-func '("russian-computer" "ukrainian-computer")) (print (funcall l2)) (print (funcall l1)) (print (funcall l1)) (print (funcall l1)) (print (funcall l2))) ===== Вот тут и происходит затык -- ELisp пишет, что символ curr не является переменной (а CLISP хавает нормально!) :( пробовал curr в defvar'е объявить перед функцией -- не помогает :( Заранее спасибо за ответы :)
Ответ на:
комментарий
от amm
Ответ на:
комментарий
от uj2
Ответ на:
комментарий
от uj2
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Отличия EmacsLisp и CommonLisp (2007)
- Форум elisp (2011)
- Форум [common lisp][ищу морфизм] ещё одна годная задачка про списки (2010)
- Форум Выясняем с помощью Emacs, какой ЯП лучше (2024)
- Форум Разбор кода на McCLIM (2020)
- Форум сделал неработоспособную конфигурацию Emacs (2017)
- Форум Emacs-starter-kit (2013)
- Форум slime Coonection part (2023)
- Форум closure (2005)
- Форум elisp (2009)