I'm trying some functions, such NthCdr FirstN LastN Slice, with my functions "CdXXXXr", the interesting thing is that, with very long lists (preferably containing strings), also the function "ALE_List_Member" is faster than the function "Member".
Any comments?
(setq aList '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30))
(ALE_List_LastN 2 aList) => (29 30)
(ALE_List_FirstN 2 aList) => (1 2)
(ALE_List_NthCdr 2 aList) => (3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30)
(ALE_List_LastN 20 aList) => (11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30)
(ALE_List_FirstN 20 aList) => (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)
(ALE_List_NthCdr 20 aList) => (21 22 23 24 25 26 27 28 29 30)
(Ale_List_Slice 2 20 aList) => (3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21)
(defun ALE_List_Member (i l)
(ALE_List_NthCdr (vl-position i l) l)
)
; 2014/02/19 - n (Position) Nth like
(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 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 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 ALE_List_Slice (n1 n2 l)
(reverse (ALE_List_NthCdr (- (length l) n2 1) (reverse (ALE_List_NthCdr n1 l))))
)
Other versions:
; 2014/02/27 slower
(defun ALE_List_NthCdr4 (n l)
(cond
( (> 10 n) (repeat n (setq l (cdr l))) l)
( (> 100 n)
(repeat (/ n 10) (setq l (Cd10r l)))
(repeat (rem n 10) (setq l (cdr l))) l
)
( (> 1000 n)
(repeat (/ n 100) (setq l (Cd100r l)))
(repeat (/ (setq n (rem n 100)) 10) (setq l (Cd10r l)))
(repeat (rem n 10) (setq l (cdr l))) l
)
( (>= n (length l)) nil )
( T
(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 (rem n 10) (setq l (cdr l))) l
)
)
)
; 2014/02/27 slower
(defun ALE_List_NthCdr3 (n l / s p)
(cond
( (> 10 n) (repeat n (setq l (cdr l))) l)
( (> 100 n)
(repeat (/ n 10) (setq l (Cd10r l)))
(repeat (rem n 10) (setq l (cdr l))) l
)
( (> 1000 n)
(repeat (/ n 100) (setq l (Cd100r l)))
(repeat (/ (setq n (rem n 100)) 10) (setq l (Cd10r l)))
(repeat (rem n 10) (setq l (cdr l))) l
)
( (>= n (length l)) nil )
( T
(setq s '(" l"))
(repeat (/ n 1000) (setq s (cons "(Cd1000r" s) p (cons ")" p)))
(repeat (/ (setq n (rem n 1000)) 100) (setq s (cons "(Cd100r" s) p (cons ")" p)))
(repeat (/ (setq n (rem n 100)) 10) (setq s (cons "(Cd10r" s) p (cons ")" p)))
(repeat (rem n 10) (setq s (cons "(cdr" s) p (cons ")" p)))
(eval (read (apply 'strcat (append s p))))
)
)
)