Схема R5RS: передать по ссылке - PullRequest
3 голосов
/ 05 декабря 2010

Я пытаюсь эмулировать стек в схеме.Я использую DrScheme и выбираю язык R5RS.Мне нужно создать функции, которые выскочить, нажать и заглянуть.Но у меня проблемы с выяснением, как пройти по ссылке.Я прочитал некоторую информацию о коробках, но они не поддерживаются в R5RS.Есть ли другой способ пройти по ссылке?

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Краткий ответ: не используйте r5rs; просто используйте родной язык. В текущих версиях DrRacket этот язык называется «ракеткой». Вот программа, которая использует коробки:

#lang racket 

(define b (box 234))

(set-box! b 333)

(unbox b)

FWIW: ответ Грега более чисто функциональный, чем мой, но было бы ошибкой полагать, что изменяемые структуры недоступны в DrRacket (ур. DrScheme).

Наконец, наконец, вы неправильно используете термин «звонок по ссылке». Коробки - это просто изменяемые структуры, и язык вызовов по значению (такой как racket, r5rs, java и т. Д.) Может изменять эти структуры очень хорошо.

0 голосов
/ 05 декабря 2010

Вместо того, чтобы передавать «по ссылке», что вы могли бы сделать на императивном языке, Схема поощряет вас мыслить функционально. Это означает, что ваша push операция, например, будет принимать два параметра:

  • стек
  • новый элемент

и возвращают новый стек, который содержит новый элемент в сочетании с остальной частью существующего стека. Точно так же операция pop будет принимать стек и возвращать его с отсутствующим верхним элементом, а peek будет возвращать значение верхнего элемента.

Как оказалось, списки в Scheme работают почти так же, как стеки. Следующие сопоставления помогут вам начать работу:

  • толчок - минусы
  • поп - отдых
  • взгляд - первый
...