gsc Posted January 3, 2018 Posted January 3, 2018 I have 2 lists: List1 (0.0 -0.196738 0.0 0.196738 0.0 0.0) List2 (-0.059895 0.120221 -0.059895 0.0) I want to insert List2 in List1 at a certain position: NewList (0.0 -0.196738 0.0 -0.059895 0.120221 -0.059895 0.0 0.196738 0.0 0.0) In this case at position nth 3 How do I do this? Quote
Tharwat Posted January 3, 2018 Posted January 3, 2018 Hi, Just an example for you comprehend the process: (setq list1 '(0.0 -0.196738 0.0 0.196738 0.0 0.0) list2 '(-0.059895 0.120221 -0.059895 0.0) ) (setq position 3) (setq run 0) (foreach item list1 (if (= (setq run (1+ run)) position) (foreach element list2 (setq lst (cons element lst)) ) (setq lst (cons item lst)) ) ) Quote
Tharwat Posted January 3, 2018 Posted January 3, 2018 Another if you want to. (setq pos 3) (mapcar '(lambda (u) (if (= (length lst) pos) (mapcar '(lambda (x) (setq lst (cons x lst))) list2) (setq lst (cons u lst)))) list1) Quote
Lee Mac Posted January 3, 2018 Posted January 3, 2018 For example: (defun foo ( new pos lst / tmp ) (repeat pos (setq tmp (cons (car lst) tmp) lst (cdr lst))) (append (reverse tmp) new lst) ) _$ (setq l1 '(0 1 2 3 4 5)) (0 1 2 3 4 5) _$ (setq l2 '("a" "b" "c")) ("a" "b" "c") _$ (foo l2 3 l1) (0 1 2 "a" "b" "c" 3 4 5) Quote
Stefan BMR Posted January 3, 2018 Posted January 3, 2018 A recursive solution (defun inslist (l1 n l2 / f) (defun f (l n) (if (and l (> n 0)) (cons (car l) (f (cdr l) (1- n))) (append l2 l) ) ) (f l1 n) ) (setq l1 '(0.0 -0.196738 0.0 0.196738 0.0 0.0) l2 '(-0.059895 0.120221 -0.059895 0.0) ) (inslist l1 3 l2) -> (0.0 -0.196738 0.0 -0.059895 0.120221 -0.059895 0.0 0.196738 0.0 0.0) Quote
Lee Mac Posted January 3, 2018 Posted January 3, 2018 Or, without the subfunction - (defun foo ( new pos lst ) (if (and (< 0 pos) lst) (cons (car lst) (foo new (1- pos) (cdr lst))) (append new lst) ) ) Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.