Помогите понять, в чем я неправ и где надо исправить, чтоб
заработало :) Значит, имеется следующий код, работающий правильно
в 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)
- Форум closure (2005)
- Форум slime Coonection part (2023)
- Форум elisp (2009)