|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
kpblc, CB
Ребята, протестируйте пожалуйста код с #427, у Димы СПДС нет, а я никак не найду где ошибка. Дима_ Пробовал добавить в filtr по отдельности check2 и check2, не работает ни в какую.
__________________
Блог |
||||
|
||||
СВ
Пытался соеденить твой код с кодом #404 от крыса, нечего не вышло. Как это правильно сделать?
__________________
Блог |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
АААААА! Вдарьте мне кирпичом, исправил в #428 - не ругайтесь строго, не тот элемент выравнивал - не из объекта, а из spisk'а - см. check3. А в тестовых моих они одинаковой длинны были.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Конструирование в области нефтеразведки Регистрация: 10.02.2006
Гомель
Сообщений: 321
|
К сожалению СПДС нет и у меня, но я ориентировался на
Цитата:
Лисп в #2 (по этой же ссылке) создает правильный список или нет? Если да, то тогда нужно нужно ориентироваться именно на этот лисп... |
|||
|
||||
Дима_
Заработало!!! Фильтр готов. Спасибо большое. Теперь у нас уже есть отфильтрованный от мусора список. Я немного изменил список (spisok), и теперь наша функция такова. Код:
1. Теперь о продолжении. На пример, в результате фильтрации мы получили такой список. Код:
Видно, что некоторые элементы дублируются абсолютно идентично. ("1" "-10х100x200") ("1" "-10х100x200) А у некоторых одинаков только номер позиции ("2" "Швеллер 12, L=1000, шаг 1000") ("2" "Швеллер 12, L=1000") ("2" "Швеллер 12") ("5" "8 20 А500c, L=1000") ("5" "8 20 А500c") Для правильной фильтрации дублирующих элементов Необходимо произвести сравнение первых и вторых элементов подсписка. Если оба элемента идентичны, то оставляем только один подсписок. Если идентичны только номера позиций, а содержание разное, то надо оставить на первом этапе более длинный подсписок. Таким образом наш список превратится в Код:
Вот такие подсписки, которые содержат лишнюю информацию. ("2" "Швеллер 12, L=1000, шаг 1000") ("5" "8 20 А500c") B.1 Алгоритм должен отслеживать есть ли во второй строке запятые . Не уверен, но если в русской и английской раскладке запятым соответствуют разные символы, то надо учесть оба. Если в строке больше одной запятой, то надо удалить все что идет после второй (вместе с запятой). B.2 Алгоритм должен также проверить начинается ли вторая строка с “цифра пробел диаметр”, или с “цифра диаметр” где диаметр может писаться двумя кодами. Вот список всех возможных комбинаций: Код:
Список должен после этого стать таким Код:
Топик все же обучающий. И хотя мне подсознательно очень хочется получить готовый лисп, я все же хотел бы и сам что-то сделать. Размышлял как самому написать фильтры условия А и В. Для этого сначала надо понять каков принцип работы check3 Попытаюсь разобраться вот в этом. Код:
(substr var 1 (strlen tmp)) Из справки я знаю что strlen вернет количество символов в списке tmp а substr должен вернуть то что получится если от значения var обрубить все что длиннее чем tmp. А вот чему равно var я не знаю. Прошу объяснить.
__________________
Блог Последний раз редактировалось Red Nova, 29.09.2008 в 21:39. |
||||
|
||||
CB,
Ошибка уже нашлась. Теперь все работает. Поскольку со многими вариантами мне не совладать, решил продолжать с алгоритмом от Димы, Если еще не надоело помогать, почитай пожалуйста мой предыдущий пост. Там я описал продолжение, и вопрос про алгоритм Димы.
__________________
Блог |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Ну Семен Семенович:
(check3 (cadr tmp) spisok) .... (defun check3 (var lst / flag) var - это аргумент который передается функции, насчет запятой она в обоих раскладках одинаковая. Пилите Шура (я про варианты а и б), что не будет получаться пиши.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Дима_,
Эх коротковато ты объясняешь. Чайник как я не поймет. Прошу пошагово объяснить вот это Код:
__________________
Блог |
||||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Вобще если есть желание потренироваться, попробуй сам написать аналогичную функцию, но которая не проверяет весь список (как эта), а заканчивается при первом совпадении - не проверяя список до конца, если сам смогешь ИХМО - будет неплохая практика.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Дима_, простыми вариантами в лиспе такое не реализовывается, по-моему. В лиспе нет ведь принудительного выхода из списка (в отличие от VB(A), C++, C# etc) без выхода из функции. (exit) и (quit), по-моему, здесь не сработают. Единственный вариант - использовать set вместо setq, но и он вряд ли даст ожидаемый эффект.
P.S. мне лениво разбираться с кодом и пытаться выяснить, что передается в качестве параметров вызова check3, но вот 3 варианта кода: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Код:
Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Нда, что-то я про while забыл напрочь ) Вай-вай, виноват по самое не могу!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
А так хотелось чтоб Red Nova сам что-то изобразил.
P.S. А кстати если вставишь в (parsing) вместо check3 check_vva, у тебя появиться логическая ошибка - работать будет но неправильно - попробуй опредили почему, а если и сам исправишь... P.P.S. Искать естественно внутри check_vva надо.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 28.09.2008 в 23:34. |
|||
|
||||
Пока Red Nova занят домашними заданиями, немного модифицированные ф-ции
Код:
Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
VVA, Сегодня на работе все с ума сошли. Не получится самому что-то попробовать, душат со всех сторон. Не успею даже толком ознакомится с твоим кодом, но если это то о чем я говорил в посте #445, то прошу соеденить это с главным кодом, последняя версия которого находится на #445 (первый код)
__________________
Блог |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
А, еще один момент - (member) можно посмотреть )
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
По поводу #445 A.
Здесь 1001 алгоритм удаления дублирующих элементов. Форум требует регистрации. Приведу первые 2 по скорости алгоритма: Алгоритм MP1 Код:
Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 29.09.2008 в 11:44. |
||||
|
||||
Конструирование в области нефтеразведки Регистрация: 10.02.2006
Гомель
Сообщений: 321
|
>Red Nova #453
Прежде чем помогать дальше, лично я хотел бы для начала разобраться со списком spisok, а именно: 1. Что есть такое - "\U+E72E" "\U+E720" "\U+E729" "\U+E725" (у меня все они отображаются как знак квадрата). Хотя наверняка это символы уголка, двутавра и т.д. из СПДС? 2. Почему список ограничен номером 20 - "20%%c", "20 %%c", "20\U+E712", "20 \U+E712"? Что "25%%c" или "120%%c"не может быть? Ну и еще одна ф-ция для удаления дубликатов: Код:
|
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Под словом модифицированные я понимаю "оптимизированные" , это моя слабость, ни что так не оптимизирует процесс, как алгоритм
"Скорострельность" проверять на больших списках (например из #445), предварительно отсортированных - (setq spisok (vl-sort spisok '<)) Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Дима_,
Даже на больших и отсортированных списках benchmark дает Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |