|
4 / 4 / 1
Регистрация: 10.12.2019
Сообщений: 176
|
|||||||||||
Common Lisp Mapcar в lisp12.05.2021, 17:08. Показов 4856. Ответов 12
Как написать программу, которая применяет функции к элементам списка с помощью mapcar?
по такому шаблону
0
|
|||||||||||
| 12.05.2021, 17:08 | |
|
Ответы с готовыми решениями:
12
Mapcar apply и mapcar Функция mapcar |
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
||
| 12.05.2021, 18:16 | ||
|
Как это, к чётным элементам? К чётным элементам списка? Но у вас два списка - непонятно, кто должен быть чётным. Дайте лучше пример аргументов и значения.
0
|
||
|
4 / 4 / 1
Регистрация: 10.12.2019
Сообщений: 176
|
|||||
| 12.05.2021, 18:46 [ТС] | |||||
|
helter,
честно, сам не понял, как подать на вход сразу два списка и применить к их элементам функции. мне просто сказали, "напиши, чтоб было вот так"
0
|
|||||
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|||
| 12.05.2021, 19:05 | |||
|
0
|
|||
|
Супер-модератор
|
||||||
| 12.05.2021, 20:38 | ||||||
|
Да, довольно
Как вариант (HomeLisp):
2
|
||||||
|
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
|
|||||||||||
| 12.05.2021, 21:32 | |||||||||||
2
|
|||||||||||
|
4 / 4 / 1
Регистрация: 10.12.2019
Сообщений: 176
|
|||||||
| 12.05.2021, 22:16 [ТС] | |||||||
![]() а можно тогда сделать так: (пока формулировал, подумал, что можно пока обойтись без "мощных" функций f1 и f2)
0
|
|||||||
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
| 13.05.2021, 00:29 | |
|
Добуквенно так сделать нельзя, потому что с mapcar вообще ничего сделать нельзя. Он как работает, так работает, это стандарт. Он сложит списки поэлементно, и всё.
Можно, например, другую функцию подсовывать. Что вы имеете в виду под "для нечётных"? 10 - чётное число. Для нечётных кого? Может, вам правда нужна чётность номера в списке?
2
|
|
|
4 / 4 / 1
Регистрация: 10.12.2019
Сообщений: 176
|
||
| 13.05.2021, 10:20 [ТС] | ||
|
0
|
||
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
| 13.05.2021, 13:03 | |
|
А, ну такие вам уже написали.
0
|
|
|
4 / 4 / 1
Регистрация: 10.12.2019
Сообщений: 176
|
|
| 13.05.2021, 14:13 [ТС] | |
|
helter, а что означает # перед '+ или '- ?
0
|
|
|
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
| 13.05.2021, 16:29 | |
|
+ это символ, то есть "лисповое слово". defun, f1, +, mapcar - это всё символы. Символы могут служить именами объектов. Например, вы пишете (+ a b). Это не значит, что надо складывать "слова" a и b. Это значит, надо взять значение переменной по имени a и значение переменной по имени b. Когда символ сам по себе стоит в выражении не на первом месте, смысл в этом - "взять переменную по имени".
Также символ может быть именем функции. Когда вы пишете (mapcar #'+ ...), здесь смысл "взять функцию по имени mapcar". Вы пишете не саму функцию mapcar, а её имя. Аналогично, (+ a b) - это "взять функцию по имени +, взять значение переменной по имени a, взять значение переменной по имени b и применить функцию к этим двум значениям". Важно, что в CL "значение переменной по имени" и "функция по имени" не совпадают по смыслу. У вас может быть переменная по имени list со значением (1 2 3), и это никак не конфликтует с тем, что существует встроенная функция по имени list. Но функция - это такой же объект, как любой другой: как число или конс-ячейка или хеш-таблица и т. п. И иногда мы хотим не применять функцию, а просто что-то сделать с этим объектом. Например, + - имя функции сложения. Как получить саму функцию сложения? Для этого перед символом мы пишем #'. То есть #'+ - это буквально значит "функция по имени +".Когда мы используем mapcar, мы не хотим ничего складывать сами. Мы хотим чтобы mapcar сам сложил, что нужно, и нам дал бы окончательный ответ. Поэтому функцию сложения нам вызывать самим не надо, а достаточно передать mapcar-у, чтобы он вызывал. Связь символов с объектами называется пространством имён. То, что я сказал, значит, что в CL пространство имён функций не совпадает с пространством имён переменных. Новичков это иногда путает, но таков дизайн языка.
3
|
|
|
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
|
||||||
| 13.05.2021, 21:01 | ||||||
|
Решетка с последующей одинарной кавычкой #' является сокращенной записью специального оператора function, то есть (mapcar #'+ '(10 10 10) '(1 2 3)) эквивалентно (mapcar (function +) '(10 10 10) '(1 2 3)):
2
|
||||||
| 13.05.2021, 21:01 | |
|
Помогаю со студенческими работами здесь
13
Mapcar для sin Книги или другой источник, где описана история версий Lisp и Common Lisp Организация циклов в Lisp (bee lisp demo) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|