Hello all:
An aid to optimize speed ?
I have a function to count how many atoms are equal in a list and sort by amount .... but it is slow ...
If anyone knows what speed it up and share, be grateful.
(defun cuantos-de-cada-en-lista (l / ll lll cont n) ; few-to-each-in-list
(foreach n l
(if (not (member n ll ) )
(setq ll ( cons n ll ) )
)
)
(foreach n ll
(setq cont 0)
( foreach nn l
( if ( eq nn n )
( setq cont (1+ cont ) )
)
)
( setq lll ( cons cont lll ) )
)
(list ( reverse ll ) lll )
)
(defun orden-cuantos-de-cada-en-lista (l / ll lll cuales cual cuan maxi posi maxi-cual ) ;order-few-of-each-in-list
( setq cuales ( cuantos-de-cada-en-lista l ) )
( setq cual ( car cuales ) )
( setq cuan ( cadr cuales ) )
( while cual
( setq maxi ( apply 'max cuan ) )
( setq posi ( vl-position maxi cuan ) )
( setq maxi-cual ( nth posi cual ) )
( setq ll ( cons maxi-cual ll ) )
( setq lll ( cons maxi lll ) )
( setq cual ( vl-remove maxi-cual cual ) )
( setq cuan ( remove-ele maxi cuan ) )
)
( list
( reverse ll )
( reverse lll )
)
)
;;;; FROM GILE....THANKS...
(defun remove-ele (ele lst)
(if (equal ele (car lst))
(cdr lst)
(cons (car lst) (remove-ele ele (cdr lst)))
)
)
;(orden-cuantos-de-cada-en-lista '( () () 1 NIL NIL NIL 1 1 2 3 4 4 4 4 4 4 ))
;---> ((4 nil 1 2 3) (6 5 3 1 1))
Greetings...