Author Topic: Puzzle: flat list to nested indexed list  (Read 4575 times)

0 Members and 1 Guest are viewing this topic.

Marc'Antonio Alessi

  • Swamp Rat
  • Posts: 1451
  • Marco
Re: Puzzle: flat list to nested indexed list
« Reply #15 on: December 09, 2017, 11:27:02 AM »
Thanks for sharing the usage idea, Marc!
I always appreciate such thing.
Grazie a te.  :)

ribarm

  • Gator
  • Posts: 3225
  • Marko Ribar, architect
Re: Puzzle: flat list to nested indexed list
« Reply #16 on: December 09, 2017, 12:09:08 PM »
I've tried once again, but no avail (over 3 levels deep)...
Maybe Lee can solve it :

Code - Auto/Visual Lisp: [Select]
  1. (defun groupbykey ( lst / tmp rtn )
  2.   (foreach itm (reverse lst)
  3.     (if (setq tmp (assoc (car itm) rtn))
  4.       (setq rtn (subst (vl-list* (car itm) (cdr itm) (cdr tmp)) tmp rtn))
  5.       (setq rtn (cons (list (car itm) (cdr itm)) rtn))
  6.     )
  7.   )
  8.   rtn
  9. )
  10.  
  11. ;; (setq l '((0 1 2) (1 2 3) (2 3 4)))
  12. ;; (groupbykey l) => ((0 (1 2)) (1 (2 3)) (2 (3 4)))
  13.  
  14. ;; (setq l '((0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5)))
  15. ;; (groupbykey l) => ((0 (1 2 3) (1 2 3 4) (1 2 3 4 5)))
  16.  
  17. ;; (setq l '((0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5)))
  18. ;; (mapcar '(lambda ( x ) (cons (car x) (groupbykey (cdr x)))) (groupbykey l)) => ((0 (1 (2 3) (2 3 4) (2 3 4 5))))
  19.  
  20. (defun foo ( lst / groupbykey rtn )
  21.  
  22.   (defun groupbykey ( lst / tmp rtn )
  23.     (foreach itm (reverse lst)
  24.       (if (setq tmp (assoc (car itm) rtn))
  25.         (setq rtn (subst (vl-list* (car itm) (cdr itm) (cdr tmp)) tmp rtn))
  26.         (setq rtn (cons (list (car itm) (cdr itm)) rtn))
  27.       )
  28.     )
  29.     rtn
  30.   )
  31.  
  32.   (setq rtn lst)
  33.   (setq rtn (groupbykey rtn))
  34.   (if (not (equal (groupbykey (cdar rtn)) (groupbykey (groupbykey (cdar rtn)))))
  35.     (cons (car rtn) (foo (cdr rtn)))
  36.   )
  37.   rtn
  38. )
  39.  
  40. ;; (mapcar '(lambda ( a ) (cons (car a) (groupbykey (cdr a)))) (cddr (mapcar '(lambda ( b ) (cons (car b) (groupbykey (cdr b)))) (cdr (mapcar '(lambda ( c ) (cons (car c) (groupbykey (cdr c)))) (groupbykey l)))))) => nil
  41. ;; (foo l) => ((0 (1 2 3) (1 2 3 4) (1 2 3 4 5))) ; needed : ((0 (1 (2 (3 (4 (5)))))))
  42.  
  43. ;; testing list over 3 levels deep :
  44. (setq In_List '(
  45. ("SubGroup 0" "Class 00" "SubClass 000" "000 DescriptionA" "000 DescriptionB" "000 Measure")
  46. ("SubGroup 0" "Class 00" "SubClass 000" "001 DescriptionA" "001 DescriptionB" "001 Measure")
  47. ("SubGroup 0" "Class 00" "SubClass 000" "002 DescriptionA" "002 DescriptionB" "002 Measure")
  48. ("SubGroup 0" "Class 01" "SubClass 010" "010 DescriptionA" "010 DescriptionB" "010 Measure")
  49. ("SubGroup 0" "Class 01" "SubClass 010" "011 DescriptionA" "011 DescriptionB" "011 Measure")
  50. ("SubGroup 0" "Class 01" "SubClass 010" "012 DescriptionA" "012 DescriptionB" "012 Measure")
  51. ("SubGroup 0" "Class 02" "SubClass 020" "020 DescriptionA" "020 DescriptionB" "020 Measure")
  52. ("SubGroup 0" "Class 02" "SubClass 020" "021 DescriptionA" "021 DescriptionB" "021 Measure")
  53. ("SubGroup 0" "Class 02" "SubClass 020" "022 DescriptionA" "022 DescriptionB" "022 Measure")
  54. ("SubGroup 1" "Class 10" "SubClass 100" "100 DescriptionA" "100 DescriptionB" "100 Measure")
  55. ("SubGroup 1" "Class 10" "SubClass 100" "101 DescriptionA" "101 DescriptionB" "101 Measure")
  56. ("SubGroup 1" "Class 10" "SubClass 100" "102 DescriptionA" "102 DescriptionB" "102 Measure")
  57. ("SubGroup 1" "Class 11" "SubClass 110" "110 DescriptionA" "110 DescriptionB" "110 Measure")
  58. ("SubGroup 1" "Class 11" "SubClass 110" "111 DescriptionA" "111 DescriptionB" "111 Measure")
  59. ("SubGroup 1" "Class 11" "SubClass 110" "112 DescriptionA" "112 DescriptionB" "112 Measure")
  60. ("SubGroup 1" "Class 12" "SubClass 120" "120 DescriptionA" "120 DescriptionB" "120 Measure")
  61. ("SubGroup 1" "Class 12" "SubClass 120" "121 DescriptionA" "121 DescriptionB" "121 Measure")
  62. ("SubGroup 1" "Class 12" "SubClass 120" "122 DescriptionA" "122 DescriptionB" "122 Measure")
  63. ("SubGroup 2" "Class 20" "SubClass 200" "200 DescriptionA" "200 DescriptionB" "200 Measure")
  64. ("SubGroup 2" "Class 20" "SubClass 200" "201 DescriptionA" "201 DescriptionB" "201 Measure")
  65. ("SubGroup 2" "Class 20" "SubClass 200" "202 DescriptionA" "202 DescriptionB" "202 Measure")
  66. ("SubGroup 2" "Class 21" "SubClass 210" "210 DescriptionA" "210 DescriptionB" "210 Measure")
  67. ("SubGroup 2" "Class 21" "SubClass 210" "211 DescriptionA" "211 DescriptionB" "211 Measure")
  68. ("SubGroup 2" "Class 21" "SubClass 210" "212 DescriptionA" "212 DescriptionB" "212 Measure")
  69. ("SubGroup 2" "Class 22" "SubClass 220" "220 DescriptionA" "220 DescriptionB" "220 Measure")
  70. ("SubGroup 2" "Class 22" "SubClass 220" "221 DescriptionA" "221 DescriptionB" "221 Measure")
  71. ("SubGroup 2" "Class 22" "SubClass 220" "222 DescriptionA" "222 DescriptionB" "222 Measure")
  72. ))
  73.  

 :-(
« Last Edit: December 09, 2017, 01:03:30 PM by ribarm »
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube

Marc'Antonio Alessi

  • Swamp Rat
  • Posts: 1451
  • Marco
Re: Puzzle: flat list to nested indexed list
« Reply #17 on: December 09, 2017, 02:37:44 PM »
I've tried once again, but no avail (over 3 levels deep)...
Maybe Lee can solve it :
...
 :(
Code: [Select]
Marko, please  read carefully:
In_List  > length 1000
         - the contents of each element in the line can be anything also empty data
         - there are not keys in the list, the sample is only to test the results
         
Out_List > 10 level each level is length 10
         >>>> In_List is with the same structure but "linear" or "flat"   
       
Code: [Select]
This is valid for 10 level but is very rude...
Code: [Select]
     (foreach ForItm In_List
        (cond
          ( (and (= Cur_CL 0) (= Cur_SC 0)) 
            (princ "\n(" FilPnt)  (princ Cur_SG FilPnt) (princ " " FilPnt) (prin1 (car   ForItm) FilPnt)
            (princ "\n(" FilPnt)  (princ Cur_CL FilPnt) (princ " " FilPnt) (prin1 (cadr  ForItm) FilPnt)
            (princ "\n(" FilPnt)  (princ Cur_SC FilPnt) (princ " " FilPnt) (prin1 (caddr ForItm) FilPnt)
              (princ " " FilPnt) (prin1 (nth 3 ForItm) FilPnt) (princ " " FilPnt) (prin1 (nth 4 ForItm) FilPnt) (princ " " FilPnt)(prin1 (nth 5 ForItm) FilPnt)
            (princ ")" FilPnt)
            (setq Cur_SC (1+ Cur_SC))
          )
          ( (= Cur_SC 0)
            (princ "\n(" FilPnt)  (princ Cur_CL FilPnt) (princ " " FilPnt) (prin1 (cadr  ForItm) FilPnt)
            (princ "\n(" FilPnt)  (princ Cur_SC FilPnt) (princ " " FilPnt) (prin1 (caddr ForItm) FilPnt)
               (princ " " FilPnt) (prin1 (nth 3 ForItm) FilPnt) (princ " " FilPnt) (prin1 (nth 4 ForItm) FilPnt) (princ " " FilPnt) (prin1 (nth 5 ForItm) FilPnt)
            (princ ")" FilPnt)
            (setq Cur_SC (1+ Cur_SC))
          )
          ( (and (= Cur_CL 9) (= Cur_SC 9))
            (princ "\n(" FilPnt)  (princ Cur_SC FilPnt) (princ " " FilPnt) (prin1 (caddr ForItm) FilPnt)
               (princ " " FilPnt) (prin1 (nth 3 ForItm) FilPnt) (princ " " FilPnt) (prin1 (nth 4 ForItm) FilPnt) (princ " " FilPnt) (prin1 (nth 5 ForItm) FilPnt)
            (princ ")" FilPnt)
            (princ "\n))" FilPnt)
            (setq Cur_SG (1+ Cur_SG)  Cur_CL 0  Cur_SC 0)
          )
          ( (= Cur_SC 9)
            (princ "\n(" FilPnt) (prin1 Cur_SC FilPnt) (princ " " FilPnt) (prin1 (caddr ForItm) FilPnt)
              (princ " " FilPnt) (prin1 (nth 3 ForItm) FilPnt) (princ " " FilPnt)  (prin1 (nth 4 ForItm) FilPnt)  (princ " " FilPnt) (prin1 (nth 5 ForItm)  FilPnt)
            (princ "))" FilPnt)
            (setq Cur_CL (1+ Cur_CL)  Cur_SC 0)
          )
          ( T
            (princ "\n(" FilPnt) (prin1 Cur_SC FilPnt) (princ " " FilPnt) (prin1 (caddr ForItm) FilPnt)
            (prin1 (nth 3 ForItm) FilPnt)  (princ " " FilPnt) (prin1 (nth 4 ForItm) FilPnt) (princ " " FilPnt) (prin1 (nth 5 ForItm) FilPnt) (princ ")" FilPnt)
            (setq Cur_SC (1+ Cur_SC))
          )
        )
      )

ribarm

  • Gator
  • Posts: 3225
  • Marko Ribar, architect
Re: Puzzle: flat list to nested indexed list
« Reply #18 on: December 09, 2017, 07:27:22 PM »
This is as far as I went ab this task...

Code - Auto/Visual Lisp: [Select]
  1. (defun groupbykey ( lst / tmp rtn )
  2.   (foreach itm (reverse lst)
  3.     (if (setq tmp (assoc (car itm) rtn))
  4.       (setq rtn (subst (vl-list* (car itm) (cdr itm) (cdr tmp)) tmp rtn))
  5.       (setq rtn (cons (list (car itm) (cdr itm)) rtn))
  6.     )
  7.   )
  8.   rtn
  9. )
  10.  
  11. ;; (setq l '((0 1 2) (1 2 3) (2 3 4)))
  12. ;; (groupbykey l) => ((0 (1 2)) (1 (2 3)) (2 (3 4)))
  13.  
  14. ;; (setq l '((0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5)))
  15. ;; (groupbykey l) => ((0 (1 2 3) (1 2 3 4) (1 2 3 4 5)))
  16.  
  17. ;; (setq l '((0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5)))
  18. ;; (mapcar '(lambda ( x ) (cons (car x) (groupbykey (cdr x)))) (groupbykey l)) => ((0 (1 (2 3) (2 3 4) (2 3 4 5))))
  19.  
  20. (defun foo ( lst / groupbykey )
  21.  
  22.   (defun groupbykey ( lst / tmp rtn )
  23.     (foreach itm (reverse lst)
  24.       (if (setq tmp (assoc (car itm) rtn))
  25.         (setq rtn (subst (vl-list* (car itm) (cdr itm) (cdr tmp)) tmp rtn))
  26.         (setq rtn (cons (list (car itm) (cdr itm)) rtn))
  27.       )
  28.     )
  29.     rtn
  30.   )
  31.  
  32.   (if (car lst)
  33.     (mapcar '(lambda ( x ) (cons (car x) (foo (cdr x)))) (groupbykey lst))
  34.   )
  35. )
  36.  
  37. ;; (setq l '((0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5)))
  38. ;; (mapcar '(lambda ( a ) (cons (car a) (groupbykey (cdr a)))) (cddr (mapcar '(lambda ( b ) (cons (car b) (groupbykey (cdr b)))) (cdr (mapcar '(lambda ( c ) (cons (car c) (groupbykey (cdr c)))) (groupbykey l)))))) => nil
  39.  
  40. ;; (setq l '((0)))
  41. ;; (foo l) => ((0))
  42.  
  43. ;; (setq l '((0 1 2) (1 2 3) (2 3 4)))
  44. ;; (foo l) => ((0 (1 (2))) (1 (2 (3))) (2 (3 (4))))
  45.  
  46. ;; (setq l '((0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5)))
  47. ;; (foo l) => ((0 (1 (2 (3)))))
  48.  
  49. (defun fooo ( lst / groupbykey )
  50.  
  51.   (defun groupbykey ( lst / tmp rtn )
  52.     (foreach itm (reverse lst)
  53.       (if (setq tmp (assoc (car itm) rtn))
  54.         (setq rtn (subst (vl-list* (car itm) (cdr itm) (cdr tmp)) tmp rtn))
  55.         (setq rtn (cons (list (car itm) (cdr itm)) rtn))
  56.       )
  57.     )
  58.     rtn
  59.   )
  60.  
  61.   (if (/= (length lst) (length (groupbykey lst)))
  62.     (mapcar '(lambda ( x ) (cons (car x) (fooo (cdr x)))) (groupbykey lst))
  63.     lst
  64.   )
  65. )
  66.  
  67. ;; (setq l '((0)))
  68. ;; (fooo l) => ((0))
  69.  
  70. ;; (setq l '((0 1 2) (1 2 3) (2 3 4)))
  71. ;; (fooo l) => ((0 1 2) (1 2 3) (2 3 4))
  72.  
  73. ;; (setq l '((0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5)))
  74. ;; (fooo l) => ((0 (1 (2 (3 (nil nil) (4 nil (5)))))))
  75.  
  76. ;; testing list over 3 levels deep :
  77. (setq In_List '(
  78. ("SubGroup 0" "Class 00" "SubClass 000" "000 DescriptionA" "000 DescriptionB" "000 Measure")
  79. ("SubGroup 0" "Class 00" "SubClass 000" "001 DescriptionA" "001 DescriptionB" "001 Measure")
  80. ("SubGroup 0" "Class 00" "SubClass 000" "002 DescriptionA" "002 DescriptionB" "002 Measure")
  81. ("SubGroup 0" "Class 01" "SubClass 010" "010 DescriptionA" "010 DescriptionB" "010 Measure")
  82. ("SubGroup 0" "Class 01" "SubClass 010" "011 DescriptionA" "011 DescriptionB" "011 Measure")
  83. ("SubGroup 0" "Class 01" "SubClass 010" "012 DescriptionA" "012 DescriptionB" "012 Measure")
  84. ("SubGroup 0" "Class 02" "SubClass 020" "020 DescriptionA" "020 DescriptionB" "020 Measure")
  85. ("SubGroup 0" "Class 02" "SubClass 020" "021 DescriptionA" "021 DescriptionB" "021 Measure")
  86. ("SubGroup 0" "Class 02" "SubClass 020" "022 DescriptionA" "022 DescriptionB" "022 Measure")
  87. ("SubGroup 1" "Class 10" "SubClass 100" "100 DescriptionA" "100 DescriptionB" "100 Measure")
  88. ("SubGroup 1" "Class 10" "SubClass 100" "101 DescriptionA" "101 DescriptionB" "101 Measure")
  89. ("SubGroup 1" "Class 10" "SubClass 100" "102 DescriptionA" "102 DescriptionB" "102 Measure")
  90. ("SubGroup 1" "Class 11" "SubClass 110" "110 DescriptionA" "110 DescriptionB" "110 Measure")
  91. ("SubGroup 1" "Class 11" "SubClass 110" "111 DescriptionA" "111 DescriptionB" "111 Measure")
  92. ("SubGroup 1" "Class 11" "SubClass 110" "112 DescriptionA" "112 DescriptionB" "112 Measure")
  93. ("SubGroup 1" "Class 12" "SubClass 120" "120 DescriptionA" "120 DescriptionB" "120 Measure")
  94. ("SubGroup 1" "Class 12" "SubClass 120" "121 DescriptionA" "121 DescriptionB" "121 Measure")
  95. ("SubGroup 1" "Class 12" "SubClass 120" "122 DescriptionA" "122 DescriptionB" "122 Measure")
  96. ("SubGroup 2" "Class 20" "SubClass 200" "200 DescriptionA" "200 DescriptionB" "200 Measure")
  97. ("SubGroup 2" "Class 20" "SubClass 200" "201 DescriptionA" "201 DescriptionB" "201 Measure")
  98. ("SubGroup 2" "Class 20" "SubClass 200" "202 DescriptionA" "202 DescriptionB" "202 Measure")
  99. ("SubGroup 2" "Class 21" "SubClass 210" "210 DescriptionA" "210 DescriptionB" "210 Measure")
  100. ("SubGroup 2" "Class 21" "SubClass 210" "211 DescriptionA" "211 DescriptionB" "211 Measure")
  101. ("SubGroup 2" "Class 21" "SubClass 210" "212 DescriptionA" "212 DescriptionB" "212 Measure")
  102. ("SubGroup 2" "Class 22" "SubClass 220" "220 DescriptionA" "220 DescriptionB" "220 Measure")
  103. ("SubGroup 2" "Class 22" "SubClass 220" "221 DescriptionA" "221 DescriptionB" "221 Measure")
  104. ("SubGroup 2" "Class 22" "SubClass 220" "222 DescriptionA" "222 DescriptionB" "222 Measure")
  105. ))
  106.  
  107. ;; (foo In_List) => Out_List
  108. ;| Out_List
  109. (("SubGroup 0" ("Class 00" ("SubClass 000" ("000 DescriptionA" ("000 DescriptionB" ("000 Measure"))) ("001 DescriptionA" ("001 DescriptionB" ("001 Measure"))) ("002 DescriptionA" ("002 DescriptionB" ("002 Measure"))))) ("Class 01" ("SubClass 010" ("010 DescriptionA" ("010 DescriptionB" ("010 Measure"))) ("011 DescriptionA" ("011 DescriptionB" ("011 Measure"))) ("012 DescriptionA" ("012 DescriptionB" ("012 Measure"))))) ("Class 02" ("SubClass 020" ("020 DescriptionA" ("020 DescriptionB" ("020 Measure"))) ("021 DescriptionA" ("021 DescriptionB" ("021 Measure"))) ("022 DescriptionA" ("022 DescriptionB" ("022 Measure")))))) ("SubGroup 1" ("Class 10" ("SubClass 100" ("100 DescriptionA" ("100 DescriptionB" ("100 Measure"))) ("101 DescriptionA" ("101 DescriptionB" ("101 Measure"))) ("102 DescriptionA" ("102 DescriptionB" ("102 Measure"))))) ("Class 11" ("SubClass 110" ("110 DescriptionA" ("110 DescriptionB" ("110 Measure"))) ("111 DescriptionA" ("111 DescriptionB" ("111 Measure"))) ("112 DescriptionA" ("112 DescriptionB" ("112 Measure"))))) ("Class 12" ("SubClass 120" ("120 DescriptionA" ("120 DescriptionB" ("120 Measure"))) ("121 DescriptionA" ("121 DescriptionB" ("121 Measure"))) ("122 DescriptionA" ("122 DescriptionB" ("122 Measure")))))) ("SubGroup 2" ("Class 20" ("SubClass 200" ("200 DescriptionA" ("200 DescriptionB" ("200 Measure"))) ("201 DescriptionA" ("201 DescriptionB" ("201 Measure"))) ("202 DescriptionA" ("202 DescriptionB" ("202 Measure"))))) ("Class 21" ("SubClass 210" ("210 DescriptionA" ("210 DescriptionB" ("210 Measure"))) ("211 DescriptionA" ("211 DescriptionB" ("211 Measure"))) ("212 DescriptionA" ("212 DescriptionB" ("212 Measure"))))) ("Class 22" ("SubClass 220" ("220 DescriptionA" ("220 DescriptionB" ("220 Measure"))) ("221 DescriptionA" ("221 DescriptionB" ("221 Measure"))) ("222 DescriptionA" ("222 DescriptionB" ("222 Measure")))))))
  110. ( ("SubGroup 0"
  111.     ("Class 00"
  112.       ("SubClass 000"
  113.         ("000 DescriptionA" ("000 DescriptionB" ("000 Measure")))
  114.         ("001 DescriptionA" ("001 DescriptionB" ("001 Measure")))
  115.         ("002 DescriptionA" ("002 DescriptionB" ("002 Measure")))
  116.       )
  117.     )
  118.     ("Class 01"
  119.       ("SubClass 010"
  120.         ("010 DescriptionA" ("010 DescriptionB" ("010 Measure")))
  121.         ("011 DescriptionA" ("011 DescriptionB" ("011 Measure")))
  122.         ("012 DescriptionA" ("012 DescriptionB" ("012 Measure")))
  123.       )
  124.     )
  125.     ("Class 02"
  126.       ("SubClass 020"
  127.         ("020 DescriptionA" ("020 DescriptionB" ("020 Measure")))
  128.         ("021 DescriptionA" ("021 DescriptionB" ("021 Measure")))
  129.         ("022 DescriptionA" ("022 DescriptionB" ("022 Measure")))
  130.       )
  131.     )
  132.   )
  133.   ("SubGroup 1"
  134.     ("Class 10"
  135.       ("SubClass 100"
  136.         ("100 DescriptionA" ("100 DescriptionB" ("100 Measure")))
  137.         ("101 DescriptionA" ("101 DescriptionB" ("101 Measure")))
  138.         ("102 DescriptionA" ("102 DescriptionB" ("102 Measure")))
  139.       )
  140.     )
  141.     ("Class 11"
  142.       ("SubClass 110"
  143.         ("110 DescriptionA" ("110 DescriptionB" ("110 Measure")))
  144.         ("111 DescriptionA" ("111 DescriptionB" ("111 Measure")))
  145.         ("112 DescriptionA" ("112 DescriptionB" ("112 Measure")))
  146.       )
  147.     )
  148.     ("Class 12"
  149.       ("SubClass 120"
  150.         ("120 DescriptionA" ("120 DescriptionB" ("120 Measure")))
  151.         ("121 DescriptionA" ("121 DescriptionB" ("121 Measure")))
  152.         ("122 DescriptionA" ("122 DescriptionB" ("122 Measure")))
  153.       )
  154.     )
  155.   )
  156.   ("SubGroup 2"
  157.     ("Class 20"
  158.       ("SubClass 200"
  159.         ("200 DescriptionA" ("200 DescriptionB" ("200 Measure")))
  160.         ("201 DescriptionA" ("201 DescriptionB" ("201 Measure")))
  161.         ("202 DescriptionA" ("202 DescriptionB" ("202 Measure")))
  162.       )
  163.     )
  164.     ("Class 21"
  165.       ("SubClass 210"
  166.         ("210 DescriptionA" ("210 DescriptionB" ("210 Measure")))
  167.         ("211 DescriptionA" ("211 DescriptionB" ("211 Measure")))
  168.         ("212 DescriptionA" ("212 DescriptionB" ("212 Measure")))
  169.       )
  170.     )
  171.     ("Class 22"
  172.       ("SubClass 220"
  173.         ("220 DescriptionA" ("220 DescriptionB" ("220 Measure")))
  174.         ("221 DescriptionA" ("221 DescriptionB" ("221 Measure")))
  175.         ("222 DescriptionA" ("222 DescriptionB" ("222 Measure")))
  176.       )
  177.     )
  178.   )
  179. )
  180. |;
  181.  
  182. ;; (fooo In_List) => Out_List
  183. ;| Out_List
  184. (("SubGroup 0" ("Class 00" ("SubClass 000" ("000 DescriptionA" "000 DescriptionB" "000 Measure") ("001 DescriptionA" "001 DescriptionB" "001 Measure") ("002 DescriptionA" "002 DescriptionB" "002 Measure"))) ("Class 01" ("SubClass 010" ("010 DescriptionA" "010 DescriptionB" "010 Measure") ("011 DescriptionA" "011 DescriptionB" "011 Measure") ("012 DescriptionA" "012 DescriptionB" "012 Measure"))) ("Class 02" ("SubClass 020" ("020 DescriptionA" "020 DescriptionB" "020 Measure") ("021 DescriptionA" "021 DescriptionB" "021 Measure") ("022 DescriptionA" "022 DescriptionB" "022 Measure")))) ("SubGroup 1" ("Class 10" ("SubClass 100" ("100 DescriptionA" "100 DescriptionB" "100 Measure") ("101 DescriptionA" "101 DescriptionB" "101 Measure") ("102 DescriptionA" "102 DescriptionB" "102 Measure"))) ("Class 11" ("SubClass 110" ("110 DescriptionA" "110 DescriptionB" "110 Measure") ("111 DescriptionA" "111 DescriptionB" "111 Measure") ("112 DescriptionA" "112 DescriptionB" "112 Measure"))) ("Class 12" ("SubClass 120" ("120 DescriptionA" "120 DescriptionB" "120 Measure") ("121 DescriptionA" "121 DescriptionB" "121 Measure") ("122 DescriptionA" "122 DescriptionB" "122 Measure")))) ("SubGroup 2" ("Class 20" ("SubClass 200" ("200 DescriptionA" "200 DescriptionB" "200 Measure") ("201 DescriptionA" "201 DescriptionB" "201 Measure") ("202 DescriptionA" "202 DescriptionB" "202 Measure"))) ("Class 21" ("SubClass 210" ("210 DescriptionA" "210 DescriptionB" "210 Measure") ("211 DescriptionA" "211 DescriptionB" "211 Measure") ("212 DescriptionA" "212 DescriptionB" "212 Measure"))) ("Class 22" ("SubClass 220" ("220 DescriptionA" "220 DescriptionB" "220 Measure") ("221 DescriptionA" "221 DescriptionB" "221 Measure") ("222 DescriptionA" "222 DescriptionB" "222 Measure")))))
  185. ( ("SubGroup 0"
  186.     ("Class 00"
  187.       ("SubClass 000"
  188.         ("000 DescriptionA" "000 DescriptionB" "000 Measure")
  189.         ("001 DescriptionA" "001 DescriptionB" "001 Measure")
  190.         ("002 DescriptionA" "002 DescriptionB" "002 Measure")
  191.       )
  192.     )
  193.     ("Class 01"
  194.       ("SubClass 010"
  195.         ("010 DescriptionA" "010 DescriptionB" "010 Measure")
  196.         ("011 DescriptionA" "011 DescriptionB" "011 Measure")
  197.         ("012 DescriptionA" "012 DescriptionB" "012 Measure")
  198.       )
  199.     )
  200.     ("Class 02"
  201.       ("SubClass 020"
  202.         ("020 DescriptionA" "020 DescriptionB" "020 Measure")
  203.         ("021 DescriptionA" "021 DescriptionB" "021 Measure")
  204.         ("022 DescriptionA" "022 DescriptionB" "022 Measure")
  205.       )
  206.     )
  207.   )
  208.   ("SubGroup 1"
  209.     ("Class 10"
  210.       ("SubClass 100"
  211.         ("100 DescriptionA" "100 DescriptionB" "100 Measure")
  212.         ("101 DescriptionA" "101 DescriptionB" "101 Measure")
  213.         ("102 DescriptionA" "102 DescriptionB" "102 Measure")
  214.       )
  215.     )
  216.     ("Class 11"
  217.       ("SubClass 110"
  218.         ("110 DescriptionA" "110 DescriptionB" "110 Measure")
  219.         ("111 DescriptionA" "111 DescriptionB" "111 Measure")
  220.         ("112 DescriptionA" "112 DescriptionB" "112 Measure")
  221.       )
  222.     )
  223.     ("Class 12"
  224.       ("SubClass 120"
  225.         ("120 DescriptionA" "120 DescriptionB" "120 Measure")
  226.         ("121 DescriptionA" "121 DescriptionB" "121 Measure")
  227.         ("122 DescriptionA" "122 DescriptionB" "122 Measure")
  228.       )
  229.     )
  230.   )
  231.   ("SubGroup 2"
  232.     ("Class 20"
  233.       ("SubClass 200"
  234.         ("200 DescriptionA" "200 DescriptionB" "200 Measure")
  235.         ("201 DescriptionA" "201 DescriptionB" "201 Measure")
  236.         ("202 DescriptionA" "202 DescriptionB" "202 Measure")
  237.       )
  238.     )
  239.     ("Class 21"
  240.       ("SubClass 210"
  241.         ("210 DescriptionA" "210 DescriptionB" "210 Measure")
  242.         ("211 DescriptionA" "211 DescriptionB" "211 Measure")
  243.         ("212 DescriptionA" "212 DescriptionB" "212 Measure")
  244.       )
  245.     )
  246.     ("Class 22"
  247.       ("SubClass 220"
  248.         ("220 DescriptionA" "220 DescriptionB" "220 Measure")
  249.         ("221 DescriptionA" "221 DescriptionB" "221 Measure")
  250.         ("222 DescriptionA" "222 DescriptionB" "222 Measure")
  251.       )
  252.     )
  253.   )
  254. )
  255. |;
  256.  

HTH. , M.R.
« Last Edit: December 11, 2017, 08:04:10 AM by ribarm »
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube

ribarm

  • Gator
  • Posts: 3225
  • Marko Ribar, architect
Re: Puzzle: flat list to nested indexed list
« Reply #19 on: December 11, 2017, 05:19:44 AM »
I am just bringing attention back to this revision if you haven't noticed... I added function (fooo lst) that may be just more appropriate for your task of grouping flattened list of lists into single assoc list of lists...

https://www.theswamp.org/index.php?topic=53706.msg584004#msg584004

Regards, M.R.
 :-)
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube

Marc'Antonio Alessi

  • Swamp Rat
  • Posts: 1451
  • Marco
Re: Puzzle: flat list to nested indexed list
« Reply #20 on: December 11, 2017, 05:43:19 AM »

I am just bringing attention back to this revision if you haven't noticed... I added function (fooo lst) that may be just more appropriate for your task of grouping flattened list of lists into single assoc list of lists...

https://www.theswamp.org/index.php?topic=53706.msg584004#msg584004

Regards, M.R.
 :)
Ok thanks for your precision and your time.  :) :) :)

ribarm

  • Gator
  • Posts: 3225
  • Marko Ribar, architect
Re: Puzzle: flat list to nested indexed list
« Reply #21 on: December 11, 2017, 08:09:04 AM »

I am just bringing attention back to this revision if you haven't noticed... I added function (fooo lst) that may be just more appropriate for your task of grouping flattened list of lists into single assoc list of lists...

https://www.theswamp.org/index.php?topic=53706.msg584004#msg584004

Regards, M.R.
 :)
Ok thanks for your precision and your time.  :) :) :)

Thanks for thanks...
I've changed (fooo lst) again - removed (if (car lst) ... check... It seems that now it does what should when reference list is :
((0 1 2 3) (0 1 2 3 4) (0 1 2 3 4 5))... I think the result should be like it is written : ((0 (1 (2 (3 (nil nil) (4 nil (5))))))), but still not 100% sure...
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube


ribarm

  • Gator
  • Posts: 3225
  • Marko Ribar, architect
Re: Puzzle: flat list to nested indexed list
« Reply #23 on: December 11, 2017, 08:58:30 AM »
To avoid such things (nil)s as result of unequal lengths of lists, make sure all lists are with the same lengths...  :-o

Code: [Select]
(not (vl-some 'atom lst))
=> T

(vl-every '(lambda ( x ) (= (length x) (length (car lst)))) (cdr lst))
=> T

 :yes:
« Last Edit: December 11, 2017, 09:08:29 AM by ribarm »
Marko Ribar, d.i.a. (graduated engineer of architecture)

:)

M.R. on Youtube