Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1

Что такое лямбда функции?

02.03.2016, 19:49. Показов 1358. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, что такое лямбда функции? Что значит запись:
Lisp
1
(lambda (w) (and (member a1 w) (member a2 w)))
Зачем их вобще использовать? Пытался гуглить, но так и не нашел внятного объяснения их сущности и необходимости. Можете объяснить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2016, 19:49
Ответы с готовыми решениями:

Функции содержащие лямбда-вызовы
Помогите преобразовать функцию. Перепишите функции, содержащие лямбда-вызовы, задав им имена ((lambda ( b &key a c d) (list a b...

Разбор лямбда-функции, описывающей часть логической схемы
Здравствуйте, друзья! Очень прошу помочь в следующей задаче (\lambda-исчисление): - имеются константы следующего вида: - xL ...

Что такое лямбда выражения?
Объясните, пожалуйста, простым и человеческим языком, что такое лямбда выражения? Можно на примере печати двумерного вектора (часть...

13
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
02.03.2016, 20:20
стр. 74
https://vk.com/doc304656442_43... dc32f7ad1e
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
02.03.2016, 20:22  [ТС]
_sg, а еще такой вопрос:
что значит функция t? Она проверяет что-то на истинность?
0
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
02.03.2016, 20:26
Анонимные функции:
http://lisper.ru/pcl/functions

Добавлено через 2 минуты
Логические значения t и nil - стр. 55
https://vk.com/doc304656442_43... dc32f7ad1e
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
02.03.2016, 20:26  [ТС]
_sg, а еще такой вопрос:
что значит let* ? Это указатель на временную локальную переменную (знаю, что бред - сказался опыт прогр-ния на Си)?
0
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
02.03.2016, 20:28
http://www.lispworks.com/docum... Master.htm

Добавлено через 48 секунд
Special Operator LET, LET*
http://www.lispworks.com/docum... _let_l.htm
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
02.03.2016, 20:30  [ТС]
Цитата Сообщение от _sg Посмотреть сообщение
http://www.lispworks.com/documentati...t/X_Master.htm
Не понял смысла:
0
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
02.03.2016, 20:30
let and let* create new variable bindings and execute a series of forms that use these bindings. let performs the bindings in parallel and let* does them sequentially.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
 (let ((var1 init-form-1)
       (var2 init-form-2)
       ...
       (varm init-form-m))
   declaration1
   declaration2
   ...
   declarationp
   form1
   form2
   ...
   formn)
first evaluates the expressions init-form-1, init-form-2, and so on, in that order, saving the resulting values. Then all of the variables varj are bound to the corresponding values; each binding is lexical unless there is a special declaration to the contrary. The expressions formk are then evaluated in order; the values of all but the last are discarded (that is, the body of a let is an implicit progn).
let* is similar to let, but the bindings of variables are performed sequentially rather than in parallel. The expression for the init-form of a var can refer to vars previously bound in the let*.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
 (let* ((var1 init-form-1)
        (var2 init-form-2)
        ...
        (varm init-form-m))
   declaration1
   declaration2
   ...
   declarationp
   form1
   form2
   ...
   formn)
first evaluates the expression init-form-1, then binds the variable var1 to that value; then it evaluates init-form-2 and binds var2, and so on. The expressions formj are then evaluated in order; the values of all but the last are discarded (that is, the body of let* is an implicit progn).
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
02.03.2016, 20:30
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Зачем их вобще использовать?
А зачем анонимные числа использовать?

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
что значит функция t?
Нет такой функции, это константа. Обычно она используется в качестве true.
0
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
02.03.2016, 20:32
Ferrari F1, записи в указателе по первой букве (значку), в алфавитном порядке:
http://www.lispworks.com/docum... Master.htm
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
02.03.2016, 20:34  [ТС]
Цитата Сообщение от helter Посмотреть сообщение
Нет такой функции
Lisp
1
(t (cons (append w1 w2) (remove-if (lambda (x) (or (member a1 x) (member a2 x))) w)))
Тут происходит проверка на истинность?

Добавлено через 1 минуту
_sg, helter, а можно своими словами пожалуйста попросить Вас объяснить, для чего в быту используется let* ?
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
02.03.2016, 20:42
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
что значит let* ? Это указатель на временную локальную переменную (знаю, что бред - сказался опыт прогр-ния на Си)?
Это не указатель, звёздочка — потому что похоже на let, но не let. Обычный let сначала вычисляет все значения в правых частях, потом связывает с ними левые части; а let* выполняет связывания последовательно. Поэтому let* используется, когда одну из переменных надо использовать в выражении, определяющем последующую переменную. Например,
Lisp
1
2
3
(let* ((a 1)
      ((b (1+ a))))
  b)
возвращает 2. Если бы было просто let, значение a из первой строчки было бы не видно во второй.

Добавлено через 6 минут
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
(t
Наверно, это из cond-а выдернуто. У cond такой синтаксис:
Lisp
1
2
3
cond (условие1 формы1)
     ...
     (условиеN формыN)
Вычисляются по очереди условия, пока не встретится истинное, и когда будет истинное ― вычисляются соответствующие формы; возвращается значение последней вычисленной формы или nil, если все условия ложные.

В качестве ветки «else» можно использовать такое условие, которое всегда истинно. В лиспе всё истинно, кроме nil, поэтому в качестве дефолтного условия можно было бы поставить, например, число 1. Однако по традиции в качестве True используют константу t.

Кстати, можно обратить внимание, что формы внутри cond вычисляются не по обычному правилу. Обычное ― когда в голове имя функции, а потом аргументы. А cond задаёт своё правило вычисления форм, не совпадающее с обычным (то, которое я выше привёл). Называется «макрос». Макросами можно реализовать разные управляющие структуры. С их помощью программист может легко добавлять новые управляющие структуры ― что в других языках, как правило, невозможно.
1
 Аватар для _sg
4709 / 4404 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
02.03.2016, 20:56
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
LispВыделить код
1
(t (cons (append w1 w2) (remove-if (lambda (x) (or (member a1 x) (member a2 x))) w)))
Тут происходит проверка на истинность?
Происходит, но это условие (константа t) проверяется внутри COND, когда ложными оказываются все проверки, то выполняется s-выражение в нижней ветке следующее за t (истина):
Lisp
1
2
3
4
5
6
7
(defun check (n)
  (cond ((zerop n) 'zero)
        ((plusp n) 'plus)
        (t 'minus)))
 
CL-USER> (check 0)
ZERO
t в последней ветке можно опустить:
Lisp
1
2
3
4
5
6
7
defun check (n)
  (cond ((zerop n) 'zero)
        ((plusp n) 'plus)
        ( 'minus)))
 
CL-USER> (check -1)
MINUS
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38175 / 21110 / 4307
Регистрация: 12.02.2012
Сообщений: 34,712
Записей в блоге: 14
03.03.2016, 11:00
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Зачем их вобще использовать? Пытался гуглить, но так и не нашел внятного объяснения их сущности и необходимости. Можете объяснить?
- что мне нравится в таких просьбах, так это присказка - "пытался искать и ничего не нашел", хотя сведениями об анонимных функциях (причем, не только в Лиспе) Интернет буквально "набит".

Основное предназначение анонимных функций - случай, когда функция нужна однократно. (Обычно функции пишутся по прямо противоположной причине - чтобы их многократно использовать). Представим, однако, что нужно посчитать сумму элементов списка, делящихся на три. Для этого есть вполне универсальный прием: сначала удалим из списка все, что на три не делится, а потом сложим все оставшиеся элементы. Чтобы удалить все, что не делится на 3, есть стандартный функционал remove-if. Первый его аргумент - логическая функция, задающая условие удаления. Значит нам нужна функция, которая будет возвращать t если ее аргумент не делится на три и nil в противном случае:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun test-3 (n)
  (/= 0 (rem n 3)))
 
 
(defun task (lst)
  (apply '+ (remove-if #'test-3 lst)))
 
==> task
 
(task '(1 2 3 4 5 6 7 8 9))
 
==> 18
Все работает... Но функция test-3 больше никому не нужна (а место в памяти и в пространстве имен занимать будет). Использование анонимной функции позволяет решить задачу "в одно действие" без лишних функций:

Lisp
1
2
3
4
5
6
7
8
(defun task (lst)
  (apply '+ (remove-if (lambda (x) (/= 0 (rem x 3))) lst)))
 
==> task
 
(task '(1 2 3 4 5 6 7 8 9))
 
==> 18
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2016, 11:00
Помогаю со студенческими работами здесь

Что такое Функции в C++
Можете объяснить что такое функции в C++, только подробно. Я не понимаю как они работают и да объясните что такое функции прототипы!...

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое IIS и что такое PWS? Почему одно без другого не работает?
вот уже второй день пытаюсь немного разобраться в АСП. накидал небольшую тестовую страничку. но с серверами я ничего не понимаю! что...

Что такое прототип функции?
Зачем нужен прототип функции ведь она и без него прекрасно работает? Если можете объясните как чайнику в подробностях) заранее спасибо...

Что такое ссылки на функции?
Хай. Вопрос в заголовке. Можно, пожалуйста с примером. Спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru