Multi-Level Patterns
(redefpatterns 'loop
((average ?set)
(make-loop ?set ?item (?total ?n)
(progn (setq ?total 0)
(setq ?n 0))
(progn (incf ?total ?item)
(incf ?n))
(/ ?total ?n) )
t ((?item (gentemp "ITEM"))
(?total (gentemp "TOTAL"))
(?n (gentemp "N"))) ) ) )
(redefpatterns 'list
'( ((make-loop ?lst ?item ?vars ?init ?action ?result)
(let (?ptr ?item . ?vars)
?init
(setq ?ptr ?lst)
(while ?ptr
(setq ?item (first ?ptr))
(setq ?ptr (rest ?ptr))
?action)
?result)
t ((?ptr (gentemp "PTR"))) ) ) )