Увеличьте минимальный размер переполнения стека в Mac Common Lisp 5.0 - PullRequest
1 голос
/ 03 октября 2010

Я относительно новичок в Лиспе (я просто знаю самые основы), и в настоящее время я пытаюсь запустить программу алгоритмической композиции, созданную Дэвидом Коупом.Он работает в MCL 5.0, и я получаю следующую ошибку:

Ошибка в процессе воспроизведения: переполнение стека в стеке значений.Чтобы глобально увеличить пространство стека, увеличьте *minimum-stack-overflow-size*

Кто-нибудь знает, какую функцию я бы использовал для увеличения размера переполнения стека и как рассчитать оптимальный размер переполнения стека для моего компьютера?Я использую MCL на старом Powerbook с 512 МБ ОЗУ.

Спасибо за ваше время,

Эдди

Ответы [ 2 ]

1 голос
/ 03 октября 2010

Первоначально параметры памяти были отредактированы с помощью ResEdit.

Можно также использовать функцию SAVE-APPLICATION и использовать ключевое слово: MEMORY-OPTIONS, чтобы указать различные значения. Это описано в справочном руководстве MCL. Эта функция сохраняет новое приложение MCL. Обычно запускают vanilla MCL, устанавливают различные параметры, загружают некоторые библиотеки и затем сохраняют новое приложение. Это новое приложение затем используется во время разработки.

Необходимый размер стека зависит от программы, которую вы хотите запустить.

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

0 голосов
/ 03 октября 2010

Похоже, вам просто нужно изменить специальную переменную *minimum-stack-overflow-size*.Когда вы находитесь в режиме REPL (CL-USER> или аналогичный), проверьте эту переменную, оценив ее имя:

CL-USER> *minimum-stack-overflow-size*

Затем установите большее значение (1234567 - это просто заполнитель) с помощью setf:

CL-USER> (setf *minimum-stack-overflow-size* 1234567)

Однако это не может быть реальной проблемой.Я не очень хорошо знаю MCL, но может потребоваться (declaim (optimize (speed 3) (safety 0))) или аналогичный, чтобы включить удаление хвостовых вызовов, если программа, которую вы хотите запустить, использует хвостовую рекурсивную функцию, которая зависит от такой оптимизации.

...