Я пытаюсь эмулировать стек в схеме. Я использую DrScheme, и я выбираю язык R5RS. Мне нужно создавать функции, которые появляются, толкают и заглядывают. Но мне трудно понять, как пройти по ссылке. Я прочитал некоторую информацию о коробках, но они не поддерживаются в R5RS. Есть ли другой способ пройти по ссылке?Схема R5RS: передать по ссылке
ответ
Вместо того, чтобы передавать «по ссылке», что вы можете сделать на императивном языке, Scheme рекомендует вам думать в функциональном смысле. Это означает, что push
операция, например, будет принимать два параметра:
- стопку
- новый элемент
и возвращение новый стек, который содержит новый элемент в сочетании с остальная часть существующего стека. Аналогично, операция pop
приведет к стеку и вернет один из них, а верхний элемент исчезнет, а peek
вернет значение верхнего элемента.
Как оказалось, списки в Scheme работают почти так же, как стеки. Следующие отображения помогут вам начать работу:
- нажимные - против
- поп - отдых
- заглядывать - первый
Короткий ответ: не используйте r5rs; просто используйте родной язык. В текущих версиях DrRacket этот язык называется «ракеткой». Вот программа, которая использует коробки:
#lang racket
(define b (box 234))
(set-box! b 333)
(unbox b)
FWIW: ответ Грега более чисто функциональным, чем у меня, но было бы ошибкой полагать, что изменяемые структуры не доступны в DrRacket (урожденная DrScheme).
Наконец, вы неправильно используете термин «вызов по ссылке». Коробки - это просто изменчивые структуры, а язык с привязкой по значению (например, racket, r5rs, java и т. Д.) Может очень легко изменить эти структуры.
- 1. Схема R5RS - Неопределенный идентификатор
- 2. Схема передачи по ссылке
- 3. Схема синтаксиса R5RS игнорируется?
- 4. Схема R5RS, функция дерева Хаффмана
- 5. Схема R5RS, рекурсия или итеративная?
- 6. передать массив по ссылке
- 7. передать HashMap по ссылке
- 8. Передать по ссылке
- 9. передать массив по ссылке
- 10. F # передать по ссылке
- 11. Схема - «неточная» концепция R5RS численных башни
- 12. Передать указатель/передать по ссылке в C
- 13. Передать по ссылке TCL - резьба?
- 14. Как передать структуру по ссылке?
- 15. Как передать свойство по ссылке
- 16. QuickSort, передать по ссылке, рекурсия
- 17. Как передать функцию по ссылке?
- 18. Передать по ссылке в классе
- 19. Как передать подстроку по ссылке?
- 20. Невозможно передать объект по ссылке
- 21. передать идентификатор по ссылке нажмите
- 22. Попытка передать матрицу по ссылке
- 23. Передать по ссылке для блоков
- 24. Передать по ссылке в C++?
- 25. Передать по ссылке в java?
- 26. Java - передать переменную по ссылке
- 27. Передать по значению и передать по ссылке в java
- 28. Передать по ссылке более дорогостоящий, чем передать по значению
- 29. Краткая схема R5RS определяет структуру или класс с несколькими полями
- 30. Добавить векторные элементы (схема R5RS) - см. Раздел пересмотренного кода
Мне нужно поп, чтобы сделать больше, чем просто удалить верхний элемент и вернуть список. Функция pop должна возвращать верхний элемент, а также удалять его из списка. Поэтому я не могу вернуть список, потому что мне нужно вернуть верхний элемент. – Crbreingan 2010-12-04 21:15:20