Loop в Lisp
От: Pal  
Дата: 02.04.03 20:48
Оценка:
Откровенно говоря я не врубился по какому условию управление покидает 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.