gnome-games r7535 - branches/gnome-2-22/aisleriot
- From: chpe svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-games r7535 - branches/gnome-2-22/aisleriot
- Date: Thu, 20 Mar 2008 23:26:52 +0000 (GMT)
Author: chpe
Date: Thu Mar 20 23:26:52 2008
New Revision: 7535
URL: http://svn.gnome.org/viewvc/gnome-games?rev=7535&view=rev
Log:
* sol.scm: Make shuffle-deck-helper tail recursive. Fixes stack
overflow exception with guile 1.8.4. Bug #519554; patch by Vincent
Povirk.
Modified:
branches/gnome-2-22/aisleriot/ChangeLog
branches/gnome-2-22/aisleriot/sol.scm
Modified: branches/gnome-2-22/aisleriot/sol.scm
==============================================================================
--- branches/gnome-2-22/aisleriot/sol.scm (original)
+++ branches/gnome-2-22/aisleriot/sol.scm Thu Mar 20 23:26:52 2008
@@ -141,7 +141,7 @@
(define (shuffle-deck)
(let* ((vec (list->vector DECK))
(len (vector-length vec)))
- (set! DECK (shuffle-deck-helper vec 0 len))))
+ (set! DECK (shuffle-deck-helper vec '() 0 len))))
; The playing area is divided into slots, where cards can be placed.
; Each slot can hold any amount of cards. The slots are identified
@@ -503,13 +503,13 @@
(cons (make-card value suit)
(make-standard-deck-list-ace-low (+ 1 value) suit))))
-(define (shuffle-deck-helper deck ref1 len)
+(define (shuffle-deck-helper deck result ref1 len)
(if (zero? len)
- '()
+ result
(let* ((ref2 (+ ref1 (random len)))
(val-at-ref2 (vector-ref deck ref2)))
(vector-set! deck ref2 (vector-ref deck ref1))
- (cons val-at-ref2 (shuffle-deck-helper deck (+ ref1 1) (- len 1))))))
+ (shuffle-deck-helper deck (cons val-at-ref2 result) (+ ref1 1) (- len 1)))))
(define (new-slot deck placement)
(list #f deck placement))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]