| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подсчет и сортировка списка.

Подсчет и сортировка списка.

Ответ
Поиск в этой теме
Непрочитано 28.05.2016, 00:02 #1
Подсчет и сортировка списка.
AlexZh
 
Регистрация: 23.09.2015
Сообщений: 146

Здравствуйте!

Имеется список вида (("кабель" "жилы" "метры"....))

(("КПСнг(А)-FRLS" "1х2х0.5" "10,2") ("КПСнг(А)-FRLS" "1х2х0.75" "23,9") ("КПСнг(А)-FRLS" "1х2х0.5" "36") ("КПСнг(А)-FRLS" "1х2х1.0" "20") ...)

как посчитать кабели в данном списке?
иметь на выходе
(("КПСнг(А)-FRLS" "1х2х0.5" "46,2") ("КПСнг(А)-FRLS" "1х2х0.75" "23,9") ("КПСнг(А)-FRLS" "1х2х1.0" "20"))
Просмотров: 2906
 
Непрочитано 28.05.2016, 00:35
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835


Критерии сортировки какие? Только первые два элемента?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.05.2016, 00:40
#3
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146



да. нужна сумма длин кабелей в итоге.
AlexZh вне форума  
 
Непрочитано 28.05.2016, 01:58
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835


Мне, как человеку, от кабелей, кабельных журналов и т.п. далекому, это не говорит ни о чем.
Offtop: Есть вообще темы по подобной тематике:
http://forum.dwg.ru/showthread.php?t=57484
http://forum.dwg.ru/showthread.php?t=73424
Ну и т.д.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.05.2016, 02:13
#5
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


нужна сортировка первых двух элементов и сумма третьих элементов, если первые два идентичны. в объяснениях я слаб(
AlexZh вне форума  
 
Непрочитано 28.05.2016, 09:43
#6
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


Как-то так:
Код:
[Выделить все]
 
(setq cab_spec  '(("КПСнг(А)-FRLS" "1х2х0.5" "10.2") ("КПСнг(А)-FRLS" "1х2х0.75" "23.9") ("КПСнг(А)-FRLS" "1х2х0.5" "36") ("КПСнг(А)-FRLS" "1х2х1.0" "20"))
        par_lst nil
)
(mapcar
 '(lambda (y)
;;;получение списка длин
    (if (setq cab_len (assoc (car y) par_lst))
      (setq par_lst 
        (subst 
          (list 
            (car cab_len)
            (vl-princ-to-string (+ (atof (cadr y))(atof (cadr cab_len))))
          )
          cab_len
          par_lst
        )
      )
      (setq par_lst (cons y par_lst))
    )    
  )
;;;сортировка по параметрам кабеля
  (mapcar '(lambda (x)(cdr x)) cab_spec)
)
(setq cab_spec  (mapcar '(lambda (x)(cons (caar cab_spec) x))  par_lst))
Следует учесть, что не учитывается марка кабеля (принято, что это уже учтено при создании списка кабеля).
В размерах в качестве разделителя должна быть точка.
roaa вне форума  
 
Автор темы   Непрочитано 28.05.2016, 15:39
#7
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146



чего то ты не учел.
попробуй это список
(("КПСнг(А)-FRLS" "1х2х0.5" "10,2") ("КПСнг(А)-FRLS" "1х2х0.5" "23,9") ("КПСнг(А)-FRLS" "1х2х0.5" "36") ("КПСнг(А)-FRLS" "1х2х0.5" "20") ("КПСнг(А)-FRLS" "1х2х0.5" "19") ("КПСнг(А)-FRLS" "1х2х0.5" "36,6") ("КПСнг(А)-FRLS" "1х2х0.5" "32,6") ("КПСнг(А)-FRLS" "1х2х0.5" "32,1") ("КПСнг(А)-FRLS" "1х2х0.5" "20,4") ("КПСнг(А)-FRLS" "1х2х0.5" "3") ("КПСнг(А)-FRLS" "1х2х0.5" "25,9") ("КПСнг(А)-FRLS" "1х2х0.5" "0,7") ("КПСнг(А)-FRLS" "1х2х0.5" "37") ("КПСнг(А)-FRLS" "1х2х0.5" "58") ("КПСнг(А)-FRLS" "1х2х0.5" "40,1") ("КПСнг(А)-FRLS" "1х2х0.5" "4,4") ("КПСнг(А)-FRLS" "1х2х0.5" "27,6") ("КПСнг(А)-FRLS" "1х2х0.5" "44,8") ("КПСнг(А)-FRLS" "1х2х0.5" "31,7") ("КПСнг(А)-FRLS" "1х2х0.5" "45") ("КПСнг(А)-FRLS" "1х2х0.5" "4,2") ("КПСнг(А)-FRLS" "1х2х0.5" "11") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КПСнг(А)-FRLS" "1x2x1.0" "1") ("КШСнг(А)-FRLS" "1х2х0.52" "44,7") ("КШСнг(А)-FRLS" "1х2х0.52" "35,6") ("КШСнг(А)-FRLS" "1х2х0.52" "28,5") ("КШСнг(А)-FRLS" "1х2х0.52" "39,3") ("КШСнг(А)-FRLS" "1х2х0.52" "29,5") ("КШСнг(А)-FRLS" "1х2х0.52" "39,7") ("КШСнг(А)-FRLS" "1х2х0.52" "11,4") ("КШСнг(А)-FRLS" "1х2х0.52" "3,8") ("КШСнг(А)-FRLS" "1х2х0.52" "6,8") ("КШСнг(А)-FRLS" "1х2х0.52" "10,7") ("КШСнг(А)-FRLS" "1х2х0.52" "11,9") ("КШСнг(А)-FRLS" "1х2х0.52" "24,2") ("КШСнг(А)-FRLS" "1х2х0.52" "11,7") ("КШСнг(А)-FRLS" "1х2х0.52" "2,3") ("КШСнг(А)-FRLS" "1х2х0.52" "3,7") ("КШСнг(А)-FRLS" "1х2х0.52" "21,4") ("КШСнг(А)-FRLS" "1х2х0.52" "36,4") ("КШСнг(А)-FRLS" "1х2х0.52" "32,6") ("КШСнг(А)-FRLS" "1х2х0.52" "25,3") ("КШСнг(А)-FRLS" "1х2х0.52" "42,9") ("КШСнг(А)-FRLS" "1х2х0.52" "22,3") ("КШСнг(А)-FRLS" "1х2х0.52" "27,2") ("КШСнг(А)-FRLS" "1х2х0.52" "23,4") ("КШСнг(А)-FRLS" "1х2х0.52" "25,5") ("КШСнг(А)-FRLS" "1х2х0.52" "90,9") ("КШСнг(А)-FRLS" "1х2х0.52" "63") ("КШСнг(А)-FRLS" "1х2х0.52" "25,7") ("КШСнг(А)-FRLS" "1х2х0.52" "43,9") ("КШСнг(А)-FRLS" "1х2х0.52" "35,6") ("КШСнг(А)-FRLS" "1х2х0.52" "22,4") ("КШСнг(А)-FRLS" "1х2х0.52" "36,1") ("КШСнг(А)-FRLS" "1х2х0.52" "3,2") ("КШСнг(А)-FRLS" "1х2х0.52" "12,9") ("КШСнг(А)-FRLS" "1х2х0.52" "4,8") ("КШСнг(А)-FRLS" "1х2х0.52" "9,1") ("КПСЭнг(А)-FRLS" "2x2x0.75" "35") ("КПСЭнг(А)-FRLS" "2x2x0.75" "45") ("КПСнг(А)-FRLS" "1x2x1.0" "8,2") ("КПСнг(А)-FRLS" "1x2x1.0" "18,9") ("КПСнг(А)-FRLS" "1x2x1.0" "3") ("КПСнг(А)-FRLS" "1x2x1.0" "3") ("КПСнг(А)-FRLS" "1x2x1.0" "10") ("КПСЭнг(А)-FRLS" "2x2x0.75" "20") ("КПСЭнг(А)-FRLS" "2x2x0.75" "50") ("КШСнг(А)-FRLS" "1х2х0.52" "19,9") ("КШСнг(А)-FRLS" "1х2х0.52" "21"))
AlexZh вне форума  
 
Непрочитано 28.05.2016, 15:52
#8
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


Я жеть писал
Цитата:
Сообщение от roaa Посмотреть сообщение
Следует учесть, что не учитывается марка кабеля (принято, что это уже учтено при создании списка кабеля).
Сначала отсортируй по названию кабеля, а потом примени к каждому списку.

Цитата:
Сообщение от roaa Посмотреть сообщение
В размерах в качестве разделителя должна быть точка.
По ходу лень читать...Стоит ли такому что-то объяснять...?

Последний раз редактировалось roaa, 28.05.2016 в 16:06.
roaa вне форума  
 
Автор темы   Непрочитано 28.05.2016, 16:22
#9
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Код:
[Выделить все]
 (setq bl_atts_list
	     (mip_makeuniquemembersoflist
	       (mapcar
		 'get-all-atts
		 (mapcar
		   'vlax-ename->vla-object
		   (vl-remove-if
		     (function listp)
		     (mapcar (function cadr) (ssnamex bl_ss)) ; _
			      ; конец
			      ; mapcar
		   ) ;_ end of vl-remove-if
		 ) ;_ end of mapcar
	       ) ;_ конец mapcar
	     ) ;_ конец mip_makeuniquemembersoflist
      ) ;_ конец setq
      
;;; ----------------------------------------------------------------------
             (setq bl_cable_list
	     (mapcar
	       'list
	       (mapcar 'cdr (mapcar 'cadddr bl_atts_list))
	       (mapcar 'cdar (mapcar 'cddddr bl_atts_list))
	       (mapcar 'cdadr (mapcar 'cddddr bl_atts_list)) ; _ конец
							     ; mapcar
	     ) ;_ конец mapcar
      ) ;_ конец setq
      (setq bl_cable_list ;lst - исходный список
		  (mapcar
		    '(lambda (x) (nth x bl_cable_list))
		    (adv-strings-sort-strings-with-numbers-i
		      (mapcar '(lambda (x) (strcat (nth 0 x) (nth 1 x)))
			      bl_cable_list
		      ) ;_ конец mapcar
		      t
		    )	      ; _ конец
			      ; adv-strings-sort-strings-with-numbers-i
		  ) ;_ конец vl-sort
	   )
      (setq cab_spec bl_cable_list
	    par_lst  nil
      ) ;_ конец setq
      (mapcar '(lambda (y)
;;;получение списка длин
		 (if (setq cab_len (assoc (car y) par_lst))
		   (setq
		     par_lst (subst
			       (list
				 (car cab_len)
				 (vl-princ-to-string
				   (+ (atof (cadr y)) (atof (cadr cab_len)))
				 ) ;_ конец vl-princ-to-string
			       ) ;_ конец list
			       cab_len
			       par_lst
			     ) ;_ конец subst
		   ) ;_ конец setq
		   (setq par_lst (cons y par_lst))
		 ) ;_ конец if
	       ) ;_ конец lambda
;;;сортировка по параметрам кабеля
	      (mapcar '(lambda (x) (cdr x)) cab_spec)
      ) ;_ конец mapcar
      (setq cab_spec
	     (mapcar '(lambda (x) (cons (caar cab_spec) x)) par_lst)
      ) ;_ конец setq
чего-то не выходит.... где тут ошибка?

----- добавлено через ~12 мин. -----
Цитата:
Сообщение от roaa Посмотреть сообщение
По ходу лень читать...Стоит ли такому что-то объяснять...?
такому? это какому?

ты вот такой умный. а в 4 строке mapcar у тебя к чему?

Последний раз редактировалось AlexZh, 28.05.2016 в 16:50.
AlexZh вне форума  
 
Непрочитано 28.05.2016, 17:01
#10
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


Ты же умнее...догадайся
Получилось примерно так (грубо, но работает):
Код:
[Выделить все]
 
(setq cab_spec '(("КПСнг(А)-FRLS" "1х2х0.5" "10.2")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "23.9")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "36")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "20") 
                 ("КПСнг(А)-FRLS" "1х2х0.5" "19") 
                 ("КПСнг(А)-FRLS" "1х2х0.5" "36.6") 
                 ("КПСнг(А)-FRLS" "1х2х0.5" "32.6")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "32.1")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "20.4")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "3")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "25.9")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "0.7")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "37")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "58")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "40.1")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "4.4")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "27.6")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "44.8")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "31.7")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "45") 
                 ("КПСнг(А)-FRLS" "1х2х0.5" "4.2")
                 ("КПСнг(А)-FRLS" "1х2х0.5" "11")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "1")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "44.7")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "35.6")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "28.5")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "39.3")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "29.5")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "39.7")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "11.4")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "3.8")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "6.8")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "10.7")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "11.9")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "24.2")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "11.7")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "2.3")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "3.7")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "21.4")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "36.4")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "32.6")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "25.3")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "42.9")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "22.3")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "27.2")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "23.4")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "25.5")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "90.9")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "63")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "25.7")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "43.9")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "35.6")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "22.4")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "36.1")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "3.2")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "12.9")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "4.8")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "9.1")
                 ("КПСЭнг(А)-FRLS" "2x2x0.75" "35")
                 ("КПСЭнг(А)-FRLS" "2x2x0.75" "45")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "8.2")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "18.9")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "3")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "3")
                 ("КПСнг(А)-FRLS" "1x2x1.0" "10")
                 ("КПСЭнг(А)-FRLS" "2x2x0.75" "20")
                 ("КПСЭнг(А)-FRLS" "2x2x0.75" "50")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "19.9")
                 ("КШСнг(А)-FRLS" "1х2х0.52" "21"))
     cab_lst nil
)

(defun _cab_len_lst (cab_lst)
  (setq par_lst nil)
  (mapcar
   '(lambda (y)
;;;получение списка длин
      (if (setq cab_len (assoc (car y) par_lst))
        (setq par_lst 
          (subst 
            (list 
              (car cab_len)
              (vl-princ-to-string (+ (atof (cadr y))(atof (cadr cab_len))))
            )
            cab_len
            par_lst
          )
        )
        (setq par_lst (cons y par_lst))
      )    
    )
;;;сортировка по параметрам кабеля
    (mapcar 'cdr cab_lst)
  )
  (mapcar '(lambda (x)(cons (caar cab_lst) x))  par_lst)
)

;;;Получение списка названий кабеля
(mapcar 
 '(lambda (x)
    (if (not (member (car x) cab_lst))
      (setq cab_lst (cons (car x) cab_lst))
    )
  )
  cab_spec
)
;;;Получение готового списка
(apply 'append 
  (mapcar
   '(lambda (cab)(_cab_len_lst cab))
;;;Сортировка списка кабелей по названию кабеля
      (mapcar 
       '(lambda (x)
          (vl-remove-if-not '(lambda (y)(= x (car y))) cab_spec)
        )
        cab_lst
    )
  )
)
Какому такому?
Цитата:
Сообщение от roaa Посмотреть сообщение
Сообщение от roaa
В размерах в качестве разделителя должна быть ТОЧКА.

Последний раз редактировалось roaa, 29.05.2016 в 11:16.
roaa вне форума  
 
Автор темы   Непрочитано 28.05.2016, 17:30
#11
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


так и с запятыми считает.

и выдает список с тремя элементами, где третий элемент - список из 2х элементов.
а должно быть - список из 4х элементов
AlexZh вне форума  
 
Непрочитано 28.05.2016, 17:43
#12
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


Цитата:
Сообщение от AlexZh Посмотреть сообщение
так и с запятыми считает.

и выдает список с тремя элементами, где третий элемент - список из 2х списков.
а должно быть - список из 4х элементов
В лиспе применяется функция "atof".... Не работает она с запятыми.
Все...я пас...
roaa вне форума  
 
Непрочитано 29.05.2016, 01:55
1 | #13
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 188
Отправить сообщение для nolte с помощью Skype™


попробуй.
Код:
[Выделить все]
 
(defun sumkab (lst / lst_tmp)
(mapcar '(lambda(a / i)
		(setq i(list(car a)(cadr a)))
		(if(not lst_tmp)
			(setq lst_tmp(cons(list i(atof (last a)))lst_tmp))
			(if(member i (mapcar 'car lst_tmp))
				(setq lst_tmp
					(subst
						(list i (+(cadr(assoc i lst_tmp))(atof(last a))))
						(assoc i lst_tmp)
						lst_tmp
					)
				)
				(setq lst_tmp(cons(list i (atof(last a)))lst_tmp))
			)
		)
	)
lst
)
lst_tmp
)
Цитата:
Сообщение от roaa Посмотреть сообщение
Сообщение от roaa
В размерах в качестве разделителя должна быть ТОЧКА.
поддерживаю.
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Непрочитано 29.05.2016, 10:02
1 | #14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Вариант с преобразованием запятой, плюс возвращается исходный список из трех элементов
Код:
[Выделить все]
(defun sumkab (lst / lst_tmp)
(vl-load-com)
(setq lst (mapcar '(lambda(x)(mapcar '(lambda(y)(vl-string-subst "." "," y)) x)) lst))
(mapcar '(lambda(a / i)
		(setq i(list(car a)(cadr a)))
		(if(not lst_tmp)
			(setq lst_tmp(cons(list i(atof (last a)))lst_tmp))
			(if(member i (mapcar 'car lst_tmp))
				(setq lst_tmp
					(subst
						(list i (+(cadr(assoc i lst_tmp))(atof(last a))))
						(assoc i lst_tmp)
						lst_tmp
					)
				)
				(setq lst_tmp(cons(list i (atof(last a)))lst_tmp))
			)
		)
	)
lst
)
;lst_tmp
(mapcar ' (lambda(a)(append (car a)(cdr a))) lst_tmp)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 29.05.2016, 11:10
#15
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Спасибо большое!
AlexZh вне форума  
 
Непрочитано 04.06.2016, 19:34
#16
lzm


 
Регистрация: 04.06.2016
Минск
Сообщений: 1


Тоже давно ищу такое. Вот только у меня список вроде ((("номер" "01") ("кабель" "КПСнг(А)-FRLS") ("сечение" "1х2х0.5") ("длина" "10,2")) (("номер" "02") ("кабель" "КПСнг(А)-FRLS") ("сечение" "1х2х0.75") ("длина" "23,9")) ... ). Как проеобразовать его к тому виду, что в шапке? Или что переделать в sumkab, чтобы работало с моим списком.

Последний раз редактировалось lzm, 04.06.2016 в 20:09.
lzm вне форума  
 
Непрочитано 05.06.2016, 11:01
#17
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от lzm Посмотреть сообщение
Как проеобразовать его к тому виду, что в шапке?
Код:
[Выделить все]
 
 (setq sps '((("номер" "01") ("кабель" "КПСнг(А)-FRLS") ("сечение" "1х2х0.5") ("длина" "10,2")) (("номер" "02") ("кабель" "КПСнг(А)-FRLS") ("сечение" "1х2х0.75") ("длина" "23,9"))))
(setq cab_spec
       (mapcar '(lambda(x)
           (list
             (cadr(assoc "кабель" x))
             (cadr(assoc "сечение" x))
             (cadr(assoc "длина" x))
             )
           )
        sps
        )
      )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подсчет и сортировка списка.

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Подсчет и сортировка по атрибутам блока AlexZh LISP 20 08.04.2016 10:24
Сортировка списка (элементы текст) по возрастанию sdv79 Программирование 20 02.01.2012 23:45
Подсчет и сортировка блоков на текущем слое. Помогите отредактировать. Kortes Программирование 17 26.03.2010 18:46
Сортирвка списка последовательно, по приоритетам (вопрос) Tonic Программирование 9 02.02.2010 14:25