|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
lambda функция объясните понятно.
Мурманск
Регистрация: 28.07.2008
Сообщений: 208
|
||
Просмотров: 15734
|
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Lambda это функция возращающая функцию созданную на основе ее тела. В "классическом" программировании функции (или операторы - в зависимости от семантики языка) обязательно должны иметь какое-то имя, в лиспе оно зачастую не нужно и функцию можно напрямую передавать другой функции (и внутри последней она будет носить имя аргумента), или применить к ней аргументы (то есть выполнить).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
1. Для использования в функциях, принимающих в качестве аргумента какую-либо функцию. Пример такой функции - vl-remove-if-not. Мне нужно, например, пройтись по списку из ename блоков и найти в нем блоки с именем "Имя". Стандартной функции, которая одновременно извлекает из ename имя и сверяет с заданной строкой, не существует. Поэтому, я мог бы написать так:
Код:
Код:
Код:
![]() |
||||
![]() |
|
||||
Регистрация: 28.07.2008
Мурманск
Сообщений: 208
![]() |
Первый код я понял. Если по порядку мы задаем Lambda(x) и применяем ее ко всем элементам списка '(1 2 3) При этом Lambda не компилируется.
Потом применяем '+ к списку который получился после применения L к списку исх данных '(1 2 3) Чего-то я второй пример не очень понял ![]() Ладно. Книга мне в помощь. Ушел читать. Если есть еще примеры или можете разобрать второй -> буду благодарен. ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Еще кусок - http://autolisp.ru/2009/09/16/lambda-functions/
Хотя наверняка меня сейчас закидают гнилыми помидорами...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
А строка возращает указатель на строку - нет такого понятия в лиспе - т.к. не нужно, т.к. списки (читай данные программы в том числе) не мутабельны - есть только переопределение.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Это уже не ко мне, а к автору ответа
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
http://lee-mac.com/mapcarlambda.html
http://ru.wikibooks.org/wiki/Лисп/Функции http://homelisp.ru/help/lisp.html
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Сорри за толстый троллинг, но продолжаем парад планет лямбд, собственно все ссылки хороши, но ничему не учат
Решаем задачку которую не могли решить аж! 90 лет http://hijos.ru/2011/02/27/summa-rya...basel-problem/ Код:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Примерно так.
Если углубляться то здесь вобще история долгая, в лиспе можно передать функцию как функцию (что по умолчанию используют например в Scheme) или как тело (простое или скомпилированное) - проще говоря список символов - что по умолчанию идет в AutoLisp, CommonLisp... В чем разница? в том что с ней предполагается делать. В Scheme предпологается использование т.н. лексических замыканий (то есть если какое-либо имя используется внутри функции - оно берется на момент ОПРЕДЕЛЕНИЯ это функции), а в автолиспе по барабану что там за имена - к ним обращаются только на момент выполнения - то есть в "голом" виде: (defun x() (+ a b)) - в автолиспе вполне себе нормальная функция, но запустить (без фатальной ошибки) ее можно только при условии что "внешне" определенны a и b и их можно сложить между собой. В Sheme подобная конструкция не примется на этапе ввода - т.к. при сохранении функции ему необходимо "знать" a и b - если знакомы с ООП - то функция это типа объект, а a и b своего рода "приватные" свойства. Из-за этого в AutoLispe переодически возникает необходимость "обработать" список функции перед выполнением (хотя эта необходимость возникает при использовании определенного стиля программирования, что в общем случае не часто - а чаще используется передача аргументов, а еще чаще (и не правильней) установка "внешних переменных" (точнее говорить переопределение внешних имен), но, в определенных задачах, дает существенные выйгрыши). p.s. Kirill_Ja не переправляй целиком посты - а то уже не ясно к чему этот - он посвящен quote и function.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 22.11.2012 в 10:15. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
Впрочем, эта задача слишком тривиальна для лямбд, так как Код:
1. Лямбды применяют как аргумент функций типа mapcar, либо пользовательских 2. Для создания локальных пространств имен возможностью добавления аккумулирующих аргументов |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) | Red Nova | LISP | 5025 | 20.08.2025 22:52 |
Выравнивание полилинии в одну линию. | f0lk | Программирование | 50 | 13.03.2025 14:04 |
Растягивание Mtext по контуру замкнутой области | PlayKid | Программирование | 7 | 27.08.2009 13:41 |
структурированный список | Holon | Программирование | 22 | 11.09.2007 14:09 |