Post a sample list (short) and results...
You are iterating with (while) and plus you have a_lst unique elements - elements should repeat randomly...My solution wasn't really practical. My question remains though; list operations can be unnecessary so wouldn't a different design approach be better in some cases?
(setq aList '("01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15")) => ("01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15")
(setq aLeng (length aList)) => 15
(setq aMLen (fix (/ (length aList) 2.0))) => 7
(ALE_List_LastN aMLen aList) => ("09" "10" "11" "12" "13" "14" "15")
(ALE_List_FirstN (- aLeng aMLen) aList) => ("01" "02" "03" "04" "05" "06" "07" "08")
(length (setq aList (atoms-family 1))) => 4091
(progn (repeat 10 (setq aList (append aList aList))) (princ))
(setq aLeng (length aList)) => 4189184
(setq aMLen (fix (/ (length aList) 2.0))) => 2094592
(length (ALE_List_LastN aMLen aList)) => 2094592
(length (ALE_List_FirstN (- aLeng aMLen) aList)) => 2094592
(defun ALE_List_NthCdr (n l)
(repeat (/ n 1000) (setq l (Cd1000r l)))
(repeat (/ (setq n (rem n 1000)) 100) (setq l (Cd100r l)))
(repeat (/ (setq n (rem n 100)) 10) (setq l (Cd10r l)))
(repeat (/ (setq n (rem n 10)) 4) (setq l (cddddr l)))
(repeat (rem n 4) (setq l (cdr l)))
l
)
;
(defun ALE_List_LastN (n l)
(ALE_List_NthCdr (- (length l) n) l)
)
(defun ALE_List_FirstN (n l)
(reverse (ALE_List_NthCdr (- (length l) n) (reverse l)))
)
(defun Cd10r (l)
(cddddr(cddddr(cddr l)))
)
(defun Cd100r (l)
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr l)))))))))))))))))))))))))
)
(defun Cd1000r (l)
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr(cddddr
(cddddr(cddddr(cddddr(cddddr(cddddr l))))))))))))
)))))))))))))))))))))))))))))))))))))))))))))))))
)))))))))))))))))))))))))))))))))))))))))))))))))
)))))))))))))))))))))))))))))))))))))))))))))))))
)))))))))))))))))))))))))))))))))))))))))))))))))
))))))))))))))))))))))))))))))))))))))))))
(defun c:splitlsthalfs ( / memberpos lst pos len l1 l2 )
(defun memberpos ( pos lst / k )
(setq k -1)
(while (< (setq k (1+ k)) pos)
(setq lst (cdr lst))
)
lst
)
(setq lst '(1 2 3 2 1 2 3 2 1 4 5 6 5 4 6))
(setq pos (fix (/ (setq len (length lst)) 2.0)))
(setq l2 (memberpos pos lst))
(setq l1 (if (= (rem len 2) 1) (reverse (cdr (memberpos pos (reverse lst)))) (reverse (memberpos pos (reverse lst)))))
(princ "\n")
(princ lst)
(princ "\n")
(princ (list l1 l2))
(princ)
)
(car-sort (atoms-family 1) '(lambda ( a b ) (<= (strlen a) (strlen b))))
(car-sort (atoms-family 1) '(lambda ( a b ) (>= (strlen a) (strlen b))))
Unless I'm overlooking something about car-sort, why not just:Code - Auto/Visual Lisp: [Select]
) rtn )
(Previously posted here (http://bit.ly/2pz2MhM).)
(defun vl-sortT (lst func)
(mapcar
'(lambda (x) (nth x lst))
(vl-sort-i lst func)
)
)
;-----------------------------------------------------------------------------------
(vl-sort '((3) (2) (1) (3) (1) (2) (2) (2)) '(lambda (E1 E2) (< (car E1) (car E2))))
=> ((1) (1) (2) (2) (2) (2) (3) (3))
(vl-sortT '((3) (2) (1) (3) (1) (2) (2) (2)) '(lambda (E1 E2) (< (car E1) (car E2))))
=> ((1) (1) (2) (2) (2) (2) (3) (3))
;-----------------------------------------------------------------------------------
(vl-sort '(3 2 1 3 1 2 2 2) '<)
=> (1 2 3) <<<<<<<<<<<<<<
(vl-sortT '(3 2 1 3 1 2 2 2) '<)
=> (1 1 2 2 2 2 3 3) <<<<<<<<<<<<<<
;-----------------------------------------------------------------------------------
(vl-sort '(3 2 1 3 1 2 2 2 1.0 1.0 1.0 1.0) '<)
=> (1 1.0 1.0 1.0 1.0 2 3) <<<<<<<<<<<<<<
(vl-sortT '(3 2 1 3 1 2 2 2 1.0 1.0 1.0 1.0) '<)
=> (1.0 1.0 1.0 1.0 1 1 2 2 2 2 3 3) <<<<<<<<<<<<<<
;-----------------------------------------------------------------------------------
(vl-sort '("a" "A" "a") '<)
=> ("A" "a" "a")
(vl-sortT '("a" "A" "a") '<)
=> ("A" "a" "a")
;-----------------------------------------------------------------------------------
(vl-sort '("a" "A" "a" "A") '<)
=> ("A" "A" "a" "a")
(vl-sortT '("a" "A" "a" "A") '<)
=> ("A" "A" "a" "a")
;-----------------------------------------------------------------------------------
The goal : You need to split big list into 2 or more smaller lists, but without using iteration and recursion - in the fastest way possible...
TEST: Can anyone see my posts?Yes.
Thank you. I was starting to worry. :)TEST: Can anyone see my posts?Yes.
The goal : You need to split big list into 2 or more smaller lists, but without using iteration and recursion - in the fastest way possible...
As LISP list are linked lists (i.e. recursive data structure) you can only acces them from the left in a recursive (or iterative) way. All built-in functions (cdr, nth, member, ...) internally recurse (or iterate) from the left to the right of the list.
The goal : You need to split big list into 2 or more smaller lists, but without using iteration and recursion - in the fastest way possible...
As LISP list are linked lists (i.e. recursive data structure) you can only acces them from the left in a recursive (or iterative) way. All built-in functions (cdr, nth, member, ...) internally recurse (or iterate) from the left to the right of the list.
Gilles, can you explain then why single iteration through whole list is slower in Lee's sub than (vl-sort) which by my opinion is sorting all elements unnecessary if we need only single extremum... If (vl-sort) is also iterating, then why this iteration is faster then normal foreach with testing only 2 items for comparison in each step of foreach...
why LISP in overall is so programmed that it's way too slower than other languages...because modern computers are way behind the lisp philosophy
(length (setq aList (atoms-family 1)))
(progn (repeat 10 (setq aList (append aList aList))) (princ))
(prompt "\nLength: ") (princ (setq aLeng (length aList))) (princ "\n")
(setq aMLen (fix (/ (length aList) 2.0)))
(setq t0 (car (_vl-times)))
(prompt "\nLength ALE_List_FirstN: ")(princ (length (ALE_List_FirstN aMLen aList)))
(setq t1 (car (_vl-times)))
(prompt "\nElapsed time for ALE_List_FirstN : ") (princ (rtos (- t1 t0) 2 20)) (prompt " milliseconds...")
(setq t0 (car (_vl-times)))
(prompt "\nLength ALE_List_LastN: ")(princ (length (ALE_List_LastN aMLen aList)))
(setq t1 (car (_vl-times)))
(prompt "\nElapsed time for ALE_List_LastN : ") (princ (rtos (- t1 t0) 2 20)) (prompt " milliseconds...")
Length: 4190208
Length ALE_List_FirstN: 2095104
Elapsed time for ALE_List_FirstN : 188 milliseconds...
Length ALE_List_LastN: 2095104
Elapsed time for ALE_List_LastN : 78 milliseconds...
Sorry for my ignorance (I don't know many languages and I'm not a programmer...) just out of curiosity: with other languages can a list long 4190208 strings be processed much faster?
> benchArray [| 1 .. 4190208 |];;
Length: 4190208
Length arrayFirstN: 2095104
Elapsed time for arrayFirstN: 2 milliseconds
Length arrayLastN: 2095104
Elapsed time for arrayLastN: 2 milliseconds
val it : unit = ()
: TEST
Elapsed time for (extremum) : 15 milliseconds...
Elapsed time for (car (vl-sort)) : 171 milliseconds...
A quick test with F# and an array (done on VS Code)Thanks for sample! :-) :roll:
<clip>
Length arrayFirstN: 2095104
Elapsed time for arrayFirstN: 2 milliseconds
Length arrayLastN: 2095104
Elapsed time for arrayLastN: 2 milliseconds
val it : unit = ()
> benchList [1 .. 4190208];;
Length: 4190208
Length listFirstN: 2095104
Elapsed time for listFirstN: 141 milliseconds
Length listLastN: 2095104
Elapsed time for listLastN: 14 milliseconds
val it : unit = ()