
Откровенно говоря я не врубился по какому условию управление покидает Loop? Объясните кто может по человечески...
в мануале написано следующее:
------------------
1. После оценивания последней формы функции LOOP управление снова
передается на оценивание первой формы этой функции.
2. Если одна из форм условного предложения, оцениваемая внутри цик-
ла, принимает значение, отличное от NIL, значение этой формы возвращается
как значение функции LOOP, и если вслед за этой функцией есть еще ка-
кая-нибудь форма, то она и оценивается.
Внутри цикла может быть несколько точек выхода. Если таких точек
вовсе нет, то цикл будет повторяться бесконечно.
--------------------
Ну а как определить точку выхода? Примеров не надо у самого достаточно... я логику понять не могу...
И еще где здесь ошибка
(defun _Swap (Arr I1 I2 %Local:% Res)
((null (/= i1 i2)) (return Arr))
(null (/= i1 0) (setq Res (sublist arr 0 (- i1 1))))
(setq Res (append res (sublist arr i2 i2)))
(setq Res (append res (sublist arr (+ i1 1) (- i2 1))))
(setq res (append res (sublist arr i1 i1)))
(setq res (append res (sublist arr (+ i2 1) (- (length arr) 1))))
(return res)
)
(defun _bSort (Arr % Local: % i p)
(setq p 1)
(loop
((zerop p) Arr)
(setq p 0
i 1)
(loop
(
(< (nth (- i 1) Arr) (nth i Arr)) (setq p 1
Arr (_swap Arr (- i 1) i))
)
(incq i)
((> i (count arr)) Arr)
)
)
)
(_bSort '(
2 9 4 7 1))
Код ничего не возвращает, ибо как я понимаю, Loop используется не верно...
используется muLisp-85 5.01