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

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

Функция убирающая одинаковые значения в списке

Ответ
Поиск в этой теме
Непрочитано 26.01.2009, 11:42 #1
Функция убирающая одинаковые значения в списке
Holon
 
CNC
 
Israel
Регистрация: 07.07.2007
Сообщений: 302

Существует список из "стрингов" к примеру
Код:
[Выделить все]
(setq  new_lst (list "hjh" "yuy" "fgf"  "fgf"  "fgf" "hjh" "hjh" "yuy"))
необходимо построить функцию так, чтобы этот список являлся
аргументом этой функции, и функция в процессе работы возвращала новый список,
без его дублирующих элементов к примеру:
Код:
[Выделить все]
( "hjh" "yuy" "fgf" )
Просмотров: 3180
 
Непрочитано 26.01.2009, 12:01
#2
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 2,105


Код:
[Выделить все]
(DeFun Unique (A / B C)
  (While A
    (SetQ
      B	(Car A)
      A	(Cdr A)
      C	(If (Member B C)
	  C
	  (Cons B C)
	)
    )
  )
  C
)

Последний раз редактировалось SetQ, 26.01.2009 в 13:41. Причина: в том варианет послдний элемент списка терялся!
SetQ вне форума  
 
Автор темы   Непрочитано 26.01.2009, 12:11
#3
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Код:
[Выделить все]
_$ (setq new_lst(list "hjh" "yuy" "fgf"  "fgf"  "fgf" "hjh" "hjh" "yuy"))(SetQ L nil)
(While
   (SetQ A (Car new_lst) new_lst (Cdr new_lst))
   (If (Null (Member A L)) (SetQ L (Cons A L)))
)
(Prin1 L)
("hjh" "yuy" "fgf" "fgf" "fgf" "hjh" "hjh" "yuy")
nil
nil
("fgf" "yuy" "hjh")("fgf" "yuy" "hjh")
_$
Holon вне форума  
 
Непрочитано 26.01.2009, 12:13
#4
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(setq new_lst (list "hjh" "yuy" "fgf" "fgf" "fgf" "hjh" "hjh" "yuy"))

(defun _remove-dups (lst / res)
  (foreach item lst
    (if (not (member item res))
      (setq res (cons item res))
      ) ;_ end of if
    ) ;_ end of foreach
  (reverse res)
  ) ;_ end of defun
P.S. Те же яйца, вид сбоку.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.01.2009, 12:25
#5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Здесь (требуется регистрация) есть на все случаи жизни
Цитата:
P.S. Те же яйца, вид сбоку.
Еще вид сверху. Основное отличие - можно "чистить" вещественные числа (например координаты)
Код:
[Выделить все]
(defun mip_MakeUniqueMembersOfList  ( lst / OutList head)
;;;Удаляет одинаковые (дубликаты) элементы из списка
;;; На основе http://www.theswamp.org/index.php?topic=19128.0
;;; Изменено для сравнения вещественных чисел (equal ... 1e-6)

  (while lst
    (setq head (car lst)
          OutList (cons head OutList)
          lst (vl-remove-if '(lambda(pt)(equal pt head 1e-6))(cdr lst))
          )
    )
  (reverse OutList)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 26.01.2009, 12:34
#6
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Спасибо
Holon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Функция убирающая одинаковые значения в списке



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение разбитого на слова текста Mist AutoCAD 46 24.05.2020 21:08
Функция перевода из вещественного значения в строку. TimurX Программирование 7 21.06.2008 07:05
DwgRuLispLib: Функция поиска в списке строки по маске Supermax Библиотека функций 1 14.01.2008 01:58
структурированный список Holon Программирование 22 11.09.2007 14:09