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

Считать из стека верхний элемент и меняет значение переменной стека

12.11.2017, 23:24. Показов 2280. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно определить макрос, который читает из стека верхний элемент и меняет значение переменной стека
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2017, 23:24
Ответы с готовыми решениями:

Извлечь из стека первый (верхний) элемент и вывести его значение D, а также адрес P2 новой вершины стека
Дано указатель P1 на вершину непустого стека. Извлечь из стека первый (верхний) элемент и вывести...

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...)
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то...

Подскажите как вывести верхний элемент стека в виде строкового представления
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Удалить элемент из стека по условию и добавить элемент в начало стека
Здравствуйте, помогите пожалуйста исправить(дописать) программы. 1). Нужно удалить элемент,...

11
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
13.11.2017, 02:13 2
Если собираетесь сами писать, поясните, что такое «стек», «переменная стека», и как должно меняться значение этой переменной.
1
0 / 0 / 0
Регистрация: 29.05.2016
Сообщений: 9
13.11.2017, 13:26  [ТС] 3
POP – снимает элемент с вершины стека, перемещая вершину к следующему элементу
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
13.11.2017, 13:52 4
Пока стало только более запутано.

Ваша терминология расходится с общепринятой. В лиспе нет «стеков». Не верите — убедитесь:
http://www.lispworks.com/docum... _glo_s.htm
Термина «stack» нет. Поэтому, раз уж вы собрались делать дело,
Цитата Сообщение от helter Посмотреть сообщение
поясните, что такое «стек»
Кроме того, «переменная стека» — это что? По ссылке вы можете убедиться, что термина «stack variable» в лиспе тоже нет. Если вы имеете в виду переменную значением которой является стек (что бы это ни было), так и пишите.

Цитата Сообщение от rskrone Посмотреть сообщение
POP – снимает элемент с вершины стека, перемещая вершину к следующему элементу
В лиспе есть стандартный макрос POP, который делает примерно то, что вы говорите, но со списками.
http://www.lispworks.com/docum... /m_pop.htm

Вы слово «POP» употребили в смысле этого макроса или просто как абстрактное имя?

Короче, если вам надо написать велосипедную реализацию макроса POP, так и напишите, не путайте народ стеками и их переменными.
0
0 / 0 / 0
Регистрация: 29.05.2016
Сообщений: 9
13.11.2017, 14:40  [ТС] 5
Я сам понятия не имею, задание находится в теме "Макросы" и задание звучит так:
Определить макрос (POP стек), который читает из стека верхний элемент и меняет значение переменной стека.
Больше никаких примечаний нет.
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
13.11.2017, 15:12 6
Если вы сами не понимаете задачу, как я могу её понять?
0
0 / 0 / 0
Регистрация: 29.05.2016
Сообщений: 9
13.11.2017, 16:31  [ТС] 7
Сделайте тогда,пожалуйста, реализацию макроса POP со списками, как вы писали выше.
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
13.11.2017, 16:45 8
Я не из тех участников форума, которые делают чужие задания. Или ждите, или делайте сами. Если будете делать сами, могу помочь.

Макрос — это функция, генерирующая код. Можно рассматривать его как сокращение для фрагмента кода.

Во-первых, напишите пример вызова макроса (только не называйте его pop, стандартные функции и макросы нельзя переопределять) и обычный лисповый код, эквивалентный ему примеру.
0
41 / 74 / 15
Регистрация: 04.10.2017
Сообщений: 283
15.11.2017, 22:41 9
Цитата Сообщение от helter Посмотреть сообщение
Если собираетесь сами писать, поясните, что такое «стек»
В терминах lisp стек это список.

Добавлено через 20 минут
Цитата Сообщение от rskrone Посмотреть сообщение
Сделайте тогда,пожалуйста, реализацию макроса POP со списками
Ну допустим вот тебе реализация. А что с ней делать дальше и как использовать ты знаешь?
Lisp
1
2
3
4
(defmacro new-pop (var)
  `(let ((ret (car ,var)))
     (setf ,var (cdr ,var))
     ret))
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
16.11.2017, 00:16 10
Цитата Сообщение от tmpValue Посмотреть сообщение
В терминах lisp стек это список.
Может, чей-то жаргон. В стандарте такого нет. Стек — абстрактный тип данных, его можно реализовать списками. А можно — не списками.

Цитата Сообщение от tmpValue Посмотреть сообщение
Ну допустим вот тебе реализация.
У неё глюк: неправильно работает, если имя списка — ret. Если макрос живёт в собственном пакете, который не экспортирует символ ret, то ничего страшного. (Если он не используется в коде в этом пакете.) Но обычно в таких случаях используют gensym.

В данном случае можно обойтись вообще без переменной, если использовать prog1.

Цитата Сообщение от tmpValue Посмотреть сообщение
А что с ней делать дальше и как использовать ты знаешь?
Показать преподу и сказать, что сам написал.
2
41 / 74 / 15
Регистрация: 04.10.2017
Сообщений: 283
16.11.2017, 01:02 11
Цитата Сообщение от helter Посмотреть сообщение
Стек — абстрактный тип данных, его можно реализовать списками. А можно — не списками.
Список — точно такой же АТД как и стек. Например, в Object Pascal реализован на базе массива, в python доступ к элементу списка О(1) что так же позволяет считать его массивом. Так что я остаюсь при своих когда заявляю что стек в терминах lisp это список.
0
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
16.11.2017, 01:46 12
В CL (в стандарте) термин «список» (list) употребляется в двух значениях: 1) цепочка конс-ячеек специального вида; 2) тип — объединение cons и null. Цепочка конс-ячеек может служить реализацией АТД «список», но можно сделать и другие реализации.

Лично я не против, чтобы список называли хоть стеком, хоть чем. Просто раз список — стандартный термин (в смысле из стандарта CL), а стек — нет, то лучше пояснить свою терминологию.

Вот, кстати говоря, есть такая библиотека http://quickdocs.org/cl-containers/api Там есть реализации и стеков, и очередей, и других типов данных. Какую роль в них играют конс-ячейки, я не знаю. В контексте этой библиотеки под «стеком» логично понимать именно её стек, а не список.
1
16.11.2017, 01:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2017, 01:46
Помогаю со студенческими работами здесь

Delphi. Dynamic: описать функцию Рор(S) целого типа, которая извлекает из стека S первый (верхний) элемент
Дан указатель Р1 на вершину стека, содержащего не менее пяти элементов. Используя тип TStack (см....

Перемещать элементы из первого стека во второй, пока значение вершины первого стека не станет четным
Даны указатели P1 и P2 на вершины двух непустых стеков. Пе-ремещать элементы из первого стека во...

Перемещать элементы из первого стека во второй, пока значение вершины первого стека не станет четным
Ребята помогите кто может... Даны указатели P1 и P2 на вершины двух непустых стеков. Перемещать...

Функция изымает элемент из стека и возвращает его значение
Нужно реализовать стек , в котором вместо двух функций top i pop используется только одна функция...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru