Author Topic: According to lst1, look for all existing lists in lst2.  (Read 1369 times)

0 Members and 1 Guest are viewing this topic.

well20152016

  • Newt
  • Posts: 130
According to lst1, look for all existing lists in lst2.
« on: March 10, 2020, 10:46:10 AM »
Code - Auto/Visual Lisp: [Select]
  1. (defun c:tt()
  2. (setq lst1 (list 1 4 6 7 5)
  3.       lst2 (list (list 6 5 D)(list 3 5 A)(list 4 7 B)(list 3 7 C)(list 4 2 E)(list 1 9 F)(list 1 4 G)(list 3 5 H)(list 3 5 I)(list 3 5 J)(list 3 5 K)(list 3 5 L))
  4. ))


ok-Result
Code: [Select]
( (list 1 9 F)
  (list 4 7 B)
  (list 6 5 D)
  (list 3 7 C)
  (list 3 5 A)
  )


Due to the different order of lst1 list, 5 is extracted first and 6 is taken away from lst1, so that when 6 is needed, nil is not available.


Code - Auto/Visual Lisp: [Select]
  1. (setq lst1 (list  5 6 7 1 9)
  2.       lst2 (list (list 6 5 D)(list 3 5 A)(list 4 7 B)(list 3 7 C)(list 4 2 E)(list 1 9 F)(list 1 4 G)(list 3 5 H)(list 3 5 I)(list 3 5 J)(list 3 5 K)(list 3 5 L))
  3. ))


error-Result
Code: [Select]
( (list 6 5 D)
   nil
  (list 4 7 B)
  (list 1 9 F)
  nil
  )


EDIT (John): Added code tags.
« Last Edit: March 10, 2020, 11:08:07 AM by John Kaul (Se7en) »

ribarm

  • Gator
  • Posts: 3274
  • Marko Ribar, architect
Re: According to lst1, look for all existing lists in lst2.
« Reply #1 on: March 10, 2020, 01:16:20 PM »
This is how I understood first part... Second part with nils I don't copy...

Code - Auto/Visual Lisp: [Select]
  1. (defun foo ( l1 l2 / ll )
  2.   (foreach a l1
  3.     (cond
  4.       ( (assoc a l2)
  5.         (setq ll (cons (assoc a l2) ll))
  6.       )
  7.       ( (assoc a (mapcar 'cdr l2))
  8.         (setq ll (cons (vl-some '(lambda ( x ) (if (= a (cadr x)) x)) l2) ll))
  9.       )
  10.     )
  11.   )
  12.   (reverse ll)
  13. )
  14.  
« Last Edit: March 10, 2020, 01:37:57 PM by ribarm »
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube

Lee Mac

  • Seagull
  • Posts: 12914
  • London, England
Re: According to lst1, look for all existing lists in lst2.
« Reply #2 on: March 10, 2020, 05:11:25 PM »
Perhaps something like this?
Code - Auto/Visual Lisp: [Select]
  1. (defun fun  ( m n / a b l r )
  2.     (while  (setq a (car m))
  3.         (if (setq m (cdr m)
  4.                   l (vl-remove-if-not '(lambda ( x ) (member a x)) n)
  5.             )
  6.             (setq b (cond ((vl-some '(lambda ( y ) (if (vl-every '(lambda ( z ) (not (member z m))) y) y)) l)) ((car l)))
  7.                   r (cons b r)
  8.                   n (vl-remove b n)
  9.             )
  10.         )
  11.     )
  12.     (reverse r)
  13. )
Code - Auto/Visual Lisp: [Select]
  1. _$ (setq l1 '(1 4 6 7 5) l2 '((6 5 D) (3 5 A) (4 7 B) (3 7 C) (4 2 E) (1 9 F) (1 4 G) (3 5 H) (3 5 I) (3 5 J) (3 5 K) (3 5 L)))
  2. ((6 5 D) (3 5 A) (4 7 B) (3 7 C) (4 2 E) (1 9 F) (1 4 G) (3 5 H) (3 5 I) (3 5 J) (3 5 K) (3 5 L))
  3. _$ (fun l1 l2)
  4. ((1 9 F) (4 2 E) (6 5 D) (4 7 B) (3 5 A))
  5.  
  6. _$ (setq l1 '(5 6 7 1 9) l2 '((6 5 D) (3 5 A) (4 7 B) (3 7 C) (4 2 E) (1 9 F) (1 4 G) (3 5 H) (3 5 I) (3 5 J) (3 5 K) (3 5 L)))
  7. ((6 5 D) (3 5 A) (4 7 B) (3 7 C) (4 2 E) (1 9 F) (1 4 G) (3 5 H) (3 5 I) (3 5 J) (3 5 K) (3 5 L))
  8. _$ (fun l1 l2)
  9. ((3 5 A) (6 5 D) (4 7 B) (1 4 G) (1 9 F))

well20152016

  • Newt
  • Posts: 130
Re: According to lst1, look for all existing lists in lst2.
« Reply #3 on: March 10, 2020, 07:14:03 PM »
Lee Mac,Thank you for your help!

I'll test it!