Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 17

Определить, что делает следующий макрос.

20.11.2014, 18:06. Показов 716. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста определить, что делает следующий макрос.
Lisp
1
2
(defmacro argument (form)
(list '(lambda (x) x) (car form)))
Заранее спасибо =)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.11.2014, 18:06
Ответы с готовыми решениями:

Определить, что делает следующий макрос
Определить, что делает следующий макрос. В случае возникновения ошибки объяснить причину ее появления. (delmacro аргумент...

Что делает этот макрос?
Определить, что делает следующий макрос. В случае возникновения ошибки объяснить причину ее появления. >(defmacro бот (&whole...

Что делает следующий код?
Приветствую всех! Вопрос простой (наверное). Что делает следующий код?V1=25; A=; Вектор от 1 до 26 я узрел, но не понял. Заранее спасибо!

7
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
20.11.2014, 18:09
Ерунду делает.
0
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 17
20.11.2014, 18:14  [ТС]
helter, я боюсь, такой ответ мне не зачтут((
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
20.11.2014, 18:32
А какой ответ вы хотите? Макрос берёт форму form (не вычисляя, макросы не вычисляют свои аргументы), берёт от неё первый элемент (если форма не является списком, будет ошибка), составляет список ((lambda (x) x) голова); а вот этот список будет вычисляться после раскрытия макросов: он вычислит голову (если сможет) и применит к ней тождественное отображение (не знаю, зачем; кстати, тождественное отображение в лиспе называется identity, не нужно для него лямд городить). То же самое можно выразить одним словом "ерунда" без существенного искажения смысла.

Вот пример. Вы в своей иде ов чоис определяете макрос, а потом пишете (argument (+ 1 2)) и в каком-нибудь меню ищете команду Macroexpand-1, которая раскроет внешний макрос. Или можно написать
Lisp
1
(macroexpand-1 '(argument (+ 1 2))
Тогда вы увидите, что макрос раскроется в
Lisp
1
((LAMBDA (X) X) +)
(компьютер пишет большими буквами). Значит, надо применить тождественную функцию к плюсу. Плюс стоит не на первом месте, значит, нужна не функция плюс, а переменная плюс. Вероятно, у вас нет такой переменной, так что при попытке вычислить
Lisp
1
(argument (+ 1 2))
будет ошибка типа "неопределённая переменная +".

Ерунда? Ещё какая.
1
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 17
20.11.2014, 18:47  [ТС]
Я нашла, что этот макрос возвращает значение своего аргумента.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
20.11.2014, 18:49
Фрэй, helter совершенно прав. Я, к примеру, не вижу позитивного применения этого макроса.

Добавлено через 1 минуту
Цитата Сообщение от Фрэй Посмотреть сообщение
Я нашла, что этот макрос возвращает значение своего аргумента.
- это не так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defmacro argument (form)
   (list '(lambda (x) x) (car form)))
 
==> argument
 
(argument (a b c))
 
Assoc: Символ a не имеет значения (не связан).
 
==> ERRSTATE
 
(argument '(a b c))
 
Assoc: Символ QUOTE не имеет значения (не связан).
 
==> ERRSTATE
1
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 17
20.11.2014, 18:58  [ТС]
Catstail, знаю, я полчаса пыталась заставить его работать. Получается с числом:
Lisp
1
2
(argument (1)) 
==> 1
Этот макрос не мой. Он из учебника.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
20.11.2014, 19:35
Цитата Сообщение от Фрэй Посмотреть сообщение
Он из учебника.
Ну вот ерунда в учебнике написана, разве это странно?

Цитата Сообщение от Фрэй Посмотреть сообщение
Получается с числом:
А что у вас получается? Аргумент у вас - список (1), а макрос честно вычисляет голову этого списка - число 1. Потому что число можно вычислить. На первое место поставьте что угодно, что можно вычислить:
Lisp
1
(argument ((+ 1 2) a b)) ==> 3
Или связанную переменную. Я вам написал, что он делает, да вы и сами могли бы в этом убедиться.

Добавлено через 1 минуту
Кстати, если в учебнике пишут (lambda (x) x) вместо identity, это точно фиговый учебник.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.11.2014, 19:35
Помогаю со студенческими работами здесь

Что делает следующий код программы?
Что делает следующий код программы: Int i; Int j; For(j=0; j<10; j++) {i=j;}

Подскажите, пожалуйста, что делает следующий кусочек кода
Подскажите пожалуйста, что делает следующий кусочек кода: Dim NewBook As Variant, NewPage As Variant, aktPage As Variant Dim colvo...

Что делает данный макрос?
Есть необходимость функционал одного excel-файла переписать на Js, но вот проблема - не могу понять, что делает этот макрос: Sub IRR()...

Что делает этот макрос ?
Что означает следующий код: #define FORWARD_WM_TIMER(hwnd, id, fn) \ (void)(fn)((hwnd), WM_TIMER, (WPARAM)(UINT)(id), 0L) ...

Что делает данный макрос
Добрый день.Помогите понять синтаксис и почему он такой. Вот простой макрос #define EMPTY() #define DEFER2(m) m EMPTY EMPTY()() ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru