Просматривая книгу Land of Lisp, мне удалось добраться до игры Grand Theft Wumpus, в которой я определил функцию make-city-edges
. Однако, когда я пытаюсь запустить его, SBCL зависает на некоторое время, прежде чем выдать мне очень неприятную ошибку, говорящую
Heap exhausted during garbage collection: 0 bytes available, 16 requested.
Gen StaPg UbSta LaSta LUbSt Boxed Unboxed LB LUB !move Alloc Waste Trig WP GCs Mem-age
0: 0 0 0 0 0 0 0 0 0 0 0 10737418 0 0 0.0000
1: 0 0 0 0 0 0 0 0 0 0 0 10737418 0 0 0.0000
2: 27757 0 0 0 19204 70 0 10 54 631392704 505408 2000000 0 0 0.9800
3: 0 0 0 0 0 0 0 0 0 0 0 2000000 0 0 0.0000
4: 0 0 0 0 0 0 0 0 0 0 0 2000000 0 0 0.0000
5: 0 0 0 0 0 0 0 0 0 0 0 2000000 0 0 0.0000
6: 0 0 0 0 1638 251 0 0 0 61898752 0 2000000 1523 0 0.0000
Total bytes allocated = 1073069936
Dynamic-space-size bytes = 1073741824
GC control variables:
*GC-INHIBIT* = true
*GC-PENDING* = true
*STOP-FOR-GC-PENDING* = false
fatal error encountered in SBCL pid 85448(tid 140735276667664):
Heap exhausted, game over.
Error opening /dev/tty: Device not configured
Welcome to LDB, a low-level debugger for the Lisp runtime environment.
ldb>
Я трижды проверил, не допустил ли я какой-либо ошибки, но не нашел ни одной.
Вот функция, вызывающая проблему:
(defun make-city-edges ()
(let* ((nodes (loop for i from 1 to *node-num*
collect i))
(edge-list (connect-all-islands nodes (make-edge-list)))
(cops (remove-if-not (lambda (x)
(zerop (random *cop-odds*)))
edge-list)))
(add-cops (edges-to-alist edge-list) cops)))
[здесь] — остальная часть кода, если вы хотите взглянуть на другие функции, Я добавил его на страницу GitHub Gist, так как он занял бы слишком много места в вопросе.
Что я могу сделать, чтобы решить эту проблему? Я использую Emacs 24.4 (9.0)
на OSX 10.9
с SLIME
и SBCL 1.2.10
для проекта.
break
s, чтобы определить, какой путь кода является проблемой. - person Svante   schedule 13.04.2015find-island
когда-либо завершится.get-connected
никогда не возвращаетnil
. - person m-n   schedule 13.04.2015find-island
- person Electric Coffee   schedule 13.04.2015find-island
было основано на возвращенииnil
:) Это должно было быть(when unconnected
, и у вас все получилось? - person m-n   schedule 13.04.2015