|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
LISP. Логическое умножение списков
Регистрация: 30.03.2012
Сообщений: 101
|
||
Просмотров: 3925
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Это как - перемножать логическое и числовое значения?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Дима_ как всегда кроссавчик! Правда я сам уже почти доделал к этому моменту. Понимаю, что торопился и перепутал cdr и car местами и должно быть
(mapcar 'car (vl-remove-if-not 'cdr (mapcar 'cons l1 l2))) а пардон, просто я у себя местами списки поменял. Получается зависимость от порядка аргументов. Не хорошо Но всё равно спасибо! ----- добавлено через ~30 мин. ----- Распространил на случай нескольких списков и убрал зависимость от порядка. Криво конечно, но Код:
Последний раз редактировалось WhiteShark, 11.01.2015 в 14:33. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Мой вариант
Код:
Цитата:
Еще вариант, если нужно оставить только числа Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 12.01.2015 в 10:09. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
А чем lambda не нравится? Она тоже встроенная.
P.S. Тогда уж и от vl-remove-* надо отказываться ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Код:
Код:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
To Алексей: просто такие условия) вот vl-remove функция родная, а лямбды (не сами по себе, а по содержанию) - уже пользовательские
To Profan: Очевидно у nil приоритет, так что () Уважаемый Евгений, приветствуем! ![]() ![]() На самом деле задачка не из пальца высосана, а в оригинале выглядела как "фильтр" для списка вида (("dimensions" "razmer" "размер" "размеры") ("text" "tekst" "надпис" "текст") ("leaders" "label" "vynosk" "vinosk" "выноски") ("tables" "tabli" "таблица" "таблицы")) откуда надо выбрать только строку по одному ключевому слову. То есть, например, для "надпис" список должен отфильтроваться до ("text" "tekst" "надпис" "текст") |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Offtop: Про лямбды я как-то на autolisp.ru высказывался.
Вопрос номер раз: а как ты предполагаешь обрабатывать этот список? А этот список как получен? Руками или все-таки как результат какой-то функции? Кто мешает его подсунуть в еще одну функцию? P.S. И наверняка самое простое будет нечто типа (vl-remove-if-not '(lambda(x) (member "надпис" x)) '(("dimensions" "razmer" "размер" "размеры") ("text" "tekst" "надпис" "текст") ("leaders" "label" "vynosk" "vinosk" "выноски") ("tables" "tabli" "таблица" "таблицы"))) Пишу насухую - кад сейчас не запустить, так что проверяй скобки и имена.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Ок, покажи короче, но с дополнительным условием - никаких VL*
![]()
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
отличный код для обработки двух списков, а у меня неограниченное количество списков и любое местоположения меток удаления...
----- добавлено через ~4 мин. ----- WhiteShark, поясни мне, а почему ты оказываешься от использования LAMBDA функций? Подобные ограничения ты даешь во многих своих темах...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
В общем рассказываю, Евгений ))
Где то я видел красивое решение по скажем так "инъектированию" функции. Что то типа вот этого когда Владимира Нестеровского по транспонированию матрицы (defun trp ( m ) (apply 'mapcar (cons 'list m))) Здесь функция list вставляется или "инъектируется" перед списками и далее пасуется вся комбинация mapcar'у. Вот, скажем, у меня какой лист (setq lst '((1 2 3) (nil T nil))) При если на него натравить вышенаписанную функцию, то первым промежуточным результатом - а именно выполнения конструкции (cons 'list m) будет (list (1 2 3) (nil T nil)). И далее apply mapcar... Действуя аналогичным образом, я составил для моей исходной задачи такую функцию (apply 'mapcar (list 'vl-remove-if-not 'cdr (apply 'mapcar (cons 'cons lst)))) где выделенная часть даёт (vl-remove-if-not 'cdr ((1) (2 . T) (3))) И вот было у меня впечатление, что в том красивом решении, которое я не мог вспомнить, как раз было как то сделано так, что и сложная функция - данном случае vl-remove-if-not 'cdr была передана дальше mapcar'у. То есть что то типа (apply 'mapcar (list 'vl-remove-if-not 'cdr (apply 'mapcar (cons 'cons lst)))) -> (apply 'mapcar (vl-remove-if-not 'cdr ((1) (2 . T) (3))) ) таки можно сделать. Поэтому было поставлено условие решить задачу без lambda. Но всё таки в том красивом решении по ходу дела была простая функция типа list, а не из двух компонентов типа vl-remove-if-not 'cdr. А так то я против лямбды ничего не имею )) Последний раз редактировалось WhiteShark, 13.01.2015 в 15:08. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
То Евгений - решил, ради спортивного интереса, подправить для обработки списка списков - получилась один в один как у Вас (только названия функции и списка другие и на строки по другому поделено) - забавно.
То WhiteShark Я не увидел причинно-следственной связи с вопросом Евгения в Вашем ответе.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
может как нибудь так?
Код:
то же самое, но без VL* Код:
Цитата:
Похоже у нас нехватка фантазии ![]()
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Lisp. Не вставляет значения в базу access. | Zaghim | LISP | 2 | 11.07.2012 14:29 |
Умер разработчик языка программирования Lisp | andr_g | LISP | 1 | 27.10.2011 08:36 |
LISP Упорядочивание списков вида ' ((a b) (c d) ... (x y)) | Yurec | LISP | 22 | 26.05.2011 07:45 |
{Конкурс} Lisp. Задачки для студентов | gomer | LISP | 10 | 05.01.2011 16:33 |
загрузка DOS прог через LISP | Gaa | LISP | 15 | 12.08.2005 19:19 |