gsc Posted January 3, 2018 Share 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 Link to comment Share on other sites More sharing options...
Tharwat Posted January 3, 2018 Share 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 Link to comment Share on other sites More sharing options...
Tharwat Posted January 3, 2018 Share 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 Link to comment Share on other sites More sharing options...
Lee Mac Posted January 3, 2018 Share 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 Link to comment Share on other sites More sharing options...
Stefan BMR Posted January 3, 2018 Share 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 Link to comment Share on other sites More sharing options...
Lee Mac Posted January 3, 2018 Share 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 Link to comment Share on other sites More sharing options...
gsc Posted January 3, 2018 Author Share Posted January 3, 2018 Thanx, all examples work! Quote Link to comment Share on other sites More sharing options...
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.