Массивы в схеме / Мемоизация

Как я могу использовать массивы в Scheme?

В частности, я пытаюсь реализовать рекурсивную процедуру Фибоначчи с помощью мемоизации. Существуют ли массивы в Scheme?

Если нет, то как я могу реализовать мемоизацию?


person Cam    schedule 01.06.2010    source источник
comment
Для таких вопросов часто очень полезно указать, какую реализацию вы используете. Мемоизация достаточно распространена в Scheme, поэтому большинство реализаций будут поставляться с некоторой библиотекой.   -  person Eli Barzilay    schedule 01.06.2010
comment
У меня была реализация в виде тега, но, похоже, sgm отредактировал его (вероятно, правильно, поскольку я думаю, что создал тег, используя его). Я использую Pretty Big Scheme (DrScheme).   -  person Cam    schedule 01.06.2010
comment
На самом деле, я просто выбрал PBS в меню выбора языка DrScheme — понятия не имею, какой из них мне следует использовать. Видимо PLT и r5rs популярны?   -  person Cam    schedule 01.06.2010
comment
В этом случае вы должны были использовать plt-scheme в качестве тега.   -  person Eli Barzilay    schedule 01.06.2010


Ответы (2)


В схеме есть массивы, но они называются векторы. Имейте в виду, что они не изменяют размер, как в других языках, таких как Perl и Javascript, или в C++ с таким же названием; вам нужно сделать больший и скопировать содержимое устаревшего.

Если вы хотите узнать больше о мемоизации и динамическом программировании в частности, вы можете прочитать главу 12 бесплатной книги Конкретные абстракции.

person Nietzche-jou    schedule 01.06.2010
comment
they don't resize; you have to make a bigger one and copy the contents of the obsolete one over. Звучит точно так же, как массив из любого другого языка. Есть ли какие-то тонкие различия, о которых я должен знать (скажем, между векторами схемы и массивами c)? Спасибо! - person Cam; 01.06.2010
comment
Я предполагаю, что элементы вектора схемы могут содержать любой объект, как и любая другая переменная или cons-ячейка, а не ограничиваться массивом _____. - person Nietzche-jou; 01.06.2010

Это не прямой ответ, поэтому не стесняйтесь голосовать против и т. д.: если вы используете PLT и вам нужна мемоизация, вам следует взглянуть на пакет memoize. Кроме того, вы можете получить функцию memoize из библиотеки мошенничества.

person Eli Barzilay    schedule 01.06.2010
comment
Довольно большая схема PLT? Я немного запутался в отношении того, что такое «схема PLT». - person Cam; 01.06.2010
comment
Да, Pretty big — это название языкового уровня в DrScheme, все части языка PLT Scheme, который вы используете. (И в наши дни проект переименовывается в Racket, отчасти для того, чтобы избежать такой путаницы.) - person Eli Barzilay; 01.06.2010