|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Что бы было понятней, что такое lambda вначале опишу что такое apply и mapcar:
apply Fn lst - применяет функцию Fn к списку lst, например: (apply '+ '(1 2 3)) эквивалентно (+ 1 2 3) что вернет 6. (mapcar Fn lst1 lst2 ... lstn) - применят функцию Fn к каждому элементу из каждого списка, ответ возращает в виде списка ответов, количество списков (lst1, lst2...) должно соответствовать количеству аргументов функции Fn, например: (mapcar '+ (list 1 2 3) (list 10 20 30)) эквивалентно (list (+ 1 10) (+ 2 20) (+ 3 30)), что вернет (11 22 33). Если мы, в качестве функции Fn хотим использовать какую-либо свою функцию, то мы должны либо предварительно создать ее используя (defun), но тогда нам придеться придумывать ей имя, либо использовать (lambda), синтаксис точно такой-же как у (defun) только без имени - а с defun'ом мы вроде уже разбирались. Пример: (mapcar '(lambda (a b c) (- (+ a b) c)) (list 1 2 3) (list 10 20 30) (list 4 5 6)) эквивалентно (list (- (+ 1 10) 4) (- (+ 2 20) 5) (- (+ 3 30) 6)), что вернет (7 17 27)
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 01.10.2008 в 00:13. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
"Первоклассник" уже понимает mapcar?
![]() --- Опа, пока я чесал репу, тут уже практически все рассказали ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 01.10.2008 в 00:16. |
|||
![]() |
|
||||
Конструирование в области нефтеразведки Регистрация: 10.02.2006
Гомель
Сообщений: 321
|
>Дима_
Цитата:
(apply Fn lst) - выполняется функция Fn, аргументы которой заданы списком. Например классика: (apply 'mapcar (cons 'list '((1 2) (10 20)))) -> ((1 10) (2 20)) Что здесь lst - (cons 'list '((1 2) (10 20))) -> (LIST (1 2) (10 20)) В этом списке первый элемент, зто аргумент функция для (mapcar функция lst1 lst2...), следующие - это аргументы lst1, lst2 для нее же. |
|||
![]() |
|
||||
Спасибо, вроде как понял.
Значит это (setq lst (mapcar '(lambda(x)(list (car x)(cadr x))) lst)) можно понять, как: к каждому элементу списка lst применить функцию создающую список из первых двух элементов первоначального списка.
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
К каждому элементу списка lst применить фунцию, которая создает список из первых двух элементов каждого подсписка.
Наверное, так будет правильнее.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Не у кого идей по #497 нет?
![]()
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Пока нет. Лично у меня не получилось абсолютно корректно сформировать список вида '("1" "1'" "1''" "2" "2a" "2A" "3" "4b" "10a" "A1" "A3" "A10" "A21"). Проблема (пока) именно в последних 4 элементах.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Хотя нет, лови:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
kpblc, Спасибо. Эту функцию можно применить, когда имеем обычный список. А как ее использовать в нашем случае, когда список парный?
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
В качестве параметров в анонимные функции попадают тогда не строки, а списки. Обработка не меняется, просто подставляются первые элементы списка.
P.S. Тут задумался - может, кто более быстрый алгоритм предложит да в библиотеку такую функцию сортировки строкового списка закинет?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Если я верно понял, то можно добавить этот код в таком виде в наш лисп. Я попробовал, но пока не работает.
Код:
__________________
Блог |
||||
![]() |
|
||||
Конструирование в области нефтеразведки Регистрация: 10.02.2006
Гомель
Сообщений: 321
|
>Red Nova
По скорости, с которой ты выдаешь ТЗ на лисп, Benchmark наверняка бы поставил тебя на первое место. ![]() Во всяком случае протестируй пока новый лисп, в котором пока нет окончательной сортировки (над ней стоит еще подумать...) Код:
Последний раз редактировалось CB, 02.10.2008 в 09:22. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
CB, возможно, дело в настройках самой VLIDE:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
CB, Спасибо. Правда фильтрует и некоторую полезную информацию. Прикрепляю файл, в котором показано что фильтруется неверно. Зато ты добавил алгоритм удаления подобных позиций. Можно вставить его в код с #494, там все остальное работает нормально.?
Цитата:
![]() ALL На данный момент есть три кода, которые хотелось бы объединить в один. 1. Совместный код с #494. Там все работает нормально, не хватает фильтра удаления подобных позиций и функции упорядочивания. 2. Код для упорядочивания списку от Крыса на #508. 3. Код от СВ c #512, который работает не совсем верно, но содержит фильтр удаления подобных позиций. Возможно взять код с #494 и добавить в него Код для упорядочивания списка с #508 и фильтр подобных позиций c #512? Я сам пытался скрестить код с #494 и с #508. Пока не выходит. Supermax, Верно подметил.
__________________
Блог |
||||
![]() |
|
||||
Конструирование в области нефтеразведки Регистрация: 10.02.2006
Гомель
Сообщений: 321
|
>Red Nova #516
В принципе все ясно. Синий текст нужно сделать в одну строчку: Имеется: Код:
Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
CB,
Пока не корректно работает. Если к примеру имею выноски с содержанием ("3" "Фл. 300х8") ("3" "Фланец 300х8") то отфильтровывается верно ("3" "Фланец 300х8") Но если имеем ("3" "Фл. 300х8") ("3" "Фланец 300х8") ("3" "дверь") То возвращяет nil. VVA, Код с #518 пойдет для нашего лиспа? Может его как-то надо адаптировать к парному списку?
__________________
Блог Последний раз редактировалось Red Nova, 02.10.2008 в 15:40. |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |