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

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

Поиск заданного значения в списке

Ответ
Поиск в этой теме
Непрочитано 01.06.2010, 14:24 #1
Поиск заданного значения в списке
swkx
 
Регистрация: 22.01.2010
Сообщений: 311

spisokt - список вида ((N1 x1 y1 z1) (N2 x2 y2 z2) ... (Nn xn yn zn))
t0 - точка с известными координатами
Мне нужно найти в списке точку tvspiske с координатами как у t0
Верно ли составлена функция поиска нужной точки ?
Код:
[Выделить все]
(setq tvspiske
  (vl-remove-if-not
    (function
    (lambda (x)
      (= (cdr x) t0)
    )
    )
  spisokt
  )
)
Просмотров: 2874
 
Непрочитано 01.06.2010, 14:40
#2
Кулик Алексей aka kpblc
Moderator

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


Замени "=" на "equal" и укажи (при необходимости) точность сравнения.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2010, 14:52
#3
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Есть ещё vl-member-if и vl-member-if-not работать будет быстрее, если по логике подойдёт :-)
Евгений А. вне форума  
 
Автор темы   Непрочитано 01.06.2010, 15:00
#4
swkx


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


Теперь отрабатывает без ошибок. А что говорит теория, не будет ли более призводительным такой вариант той же функции ?:

Код:
[Выделить все]
(setq tvspiske
	(vl-remove-if-not
	  (function
		(lambda (x)
		  (AND
			(= (nth 0 (cdr x)) (nth 0 t0))
			(= (nth 1 (cdr x)) (nth 1 t0))
			(= (nth 2 (cdr x)) (nth 2 t0))
		  )
		)
	  )
	  spisokt
	)
)
swkx вне форума  
 
Непрочитано 01.06.2010, 15:06
#5
Кулик Алексей aka kpblc
Moderator

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


На autolisp.ru есть код benchmark и примеры его использования. Скажу честно, просто повторяться лениво.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2010, 16:02
#6
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Думаю, что так только медленнее будет. Сравнивал как-то nth и cadddr, так nth - оказалась гораздо тормознутее. тут думаю это скажется.
Евгений А. вне форума  
 
Автор темы   Непрочитано 01.06.2010, 16:17
#7
swkx


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


Понял, учту.
swkx вне форума  
 
Непрочитано 01.06.2010, 17:57
#8
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Код:
[Выделить все]
(vl-remove-if-not
  (function
    (lambda (x)
      (equal x t0 0.0001)
    ) ;_ end of lambda
  ) ;_ end of function
  spisokt
) ;_ end of vl-remove-if-not
CB вне форума  
 
Автор темы   Непрочитано 01.06.2010, 18:32
#9
swkx


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


СВ,

Алексей мне так и объяснил

допуск 0.0001 нужен всегда, даже если все построения выполнялись с шаговой привязкой ? или на всякий случай?

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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск фрагмента текста в текстовых файлах Nike Разное 23 14.05.2019 07:14
Нормоконтроль и Пояснительная записка! Shtrih Разное 8 08.07.2009 22:29
поиск значений в Excel Griha_ Разное 14 09.06.2009 13:04
Функция убирающая одинаковые значения в списке Holon Программирование 5 26.01.2009 12:34
SW 2007: как добавить нужные значения масштаба? Creator SolidWorks 5 18.01.2009 17:31