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

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

Исключение элементов одного списка из другого по маске

Ответ
Поиск в этой теме
Непрочитано 18.09.2006, 16:52 #1
Исключение элементов одного списка из другого по маске
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,787

Я точно перегрелся, сообразить не могу. Суть проблемы в следующем:
есть 2 списка:
Код:
[Выделить все]
(setq a_lst '("abc0" "abc1" "abc2" "def1" "def2" "ghi" "jki"))
(seqt b_lst '(("abc") ("def") ("rty")))
Необходимо из списка a_lst исключить элементы, "подобные" первым. То есть после обработки остаться должен список
Код:
[Выделить все]
'("ghi" "jki")
Для одного элемента списка b_lst все выглядит достаточно просто:
Код:
[Выделить все]
(vl-remove-if '(LAMBDA(a) (WCMATCH (strcase a) (strcase (strcat (caar b_lst) "[0-9]")))) a_lst)
Но как сделать для списка? Сильно хочется сделать в один проход списка, но дотумкать никак не получается, хоть плачь
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 4336
 
Непрочитано 18.09.2006, 17:11
#2
VVA

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


Код:
[Выделить все]
(vl-remove-if '(LAMBDA(a)
		 (WCMATCH (strcase a)
			  (strcase (apply 'strcat (mapcar '(lambda (ch)(strcat (car ch) "[0-9],")) b_lst)))
			  )) a_lst)
VVA вне форума  
 
Непрочитано 18.09.2006, 17:14
#3
VVA

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


Чтоб не напрягать машину имхо лучше так
Код:
[Выделить все]
(setq a_lst '("abc0" "abc1" "abc2" "def1" "def2" "ghi" "jki")) 
(setq b_lst '(("abc") ("def") ("rty")))
(setq pattern (strcase (apply 'strcat (mapcar '(lambda (ch)(strcat (car ch) "[0-9],")) b_lst))))
(vl-remove-if '(LAMBDA(a)(WCMATCH (strcase a) pattern)) a_lst)
VVA вне форума  
 
Автор темы   Непрочитано 18.09.2006, 17:31
#4
Кулик Алексей aka kpblc
Moderator

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


Спаситель! Спасибо тебе огромное просто!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Исключение элементов одного списка из другого по маске

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск