2010-12-30 3 views
0

J'ai une procédure sans arguments qui crée une matrice, mais ne renvoie rien, comment puis-je accéder à la matrice?J'ai une procédure sans arguments qui crée une matrice, mais ne renvoie rien, comment puis-je accéder à la matrice?

Ceci est mon code:

(define matrix 
    (lambda (rows columns) 
    (do ((m (make-vector rows)) 
     (i 0 (+ i 1))) 
     ((= i rows) m) 
     (vector-set! m i (make-vector columns))))) 

(define Mod-matrix! 
    (lambda (m i j) 
    (vector-ref (vector-ref m i) j))) 

(define (board) 
    (mk-w (matrix 8 8) 0 0)) 

(define (mk-b b l c) 
    (cond ((and (< l 8) (< c 8)) (begin 
           (Mod-matrix! b l c p) 
           (mk-b b l (+ c 2)))) 
     ((and (>= c 8) (< l 8))(mk-b b (+ l 2) 0)) 
     (else (mk-w b 0 1)))) 

(define (mk-b b l c) 
    (cond ((and (< l 8) (< c 8)) (begin 
           (Mod-matrix! b l c b) 
           (mk-w ti l (+ c 2)))) 
     ((and (>= c 8) (< l 8)) (mk-white b (+ l 2) 0)))) 
+0

Avez-vous du code? Il est difficile de penser à un problème sans avoir du code à regarder. –

+0

Que voulez-vous dire "fait une matrice"? Voulez-vous vraiment dire "vide" (l'étiquette dit Scheme)? –

+0

Je veux dire, il crée une matrice, mais ne renvoie rien ..... je veux l'acesser, parce que je veux modifier les lignes et les colonnes de celui-ci. – gn66

Répondre

0

Votre fonction mk-w ne renvoie pas la matrice. Effectuez les opérations suivantes:

(define (mk-w b l c) 
(cond 
    ((and (< l 8) (< c 8)) 
    (begin (Mod-matrix! b l c) 
     (mk-w b l (+ c 2)) 
     b)) 
    ((and (>= c 8) (< l 8)) 
    (begin 
    (mk-w b (+ l 2) 0) 
    b)))) 

Notez que dans chaque cas, la dernière expression dans le bloc commence est la matrice elle-même, c'est parce que la valeur de retour d'un bloc commence est la valeur de la dernière expression. Dans votre message, ces dernières expressions renvoyaient une valeur indéfinie.

+0

Il fonctionne exactement comme je voulais xD Merci! Et merci à tout ce qui m'a aidé. Excellente nouvelle année! – gn66

0

Si vous souhaitez accéder à la matrice, ont la fonction retourne la matrice plutôt que nil ou autre chose. C'est généralement considéré comme une mauvaise forme, mais vous pouvez utiliser la matrice pour une variable à l'intérieur de la fonction.

Si vous ne pouvez pas modifier la fonction, vous ne pouvez pas accéder à la matrice.

+0

Post édité, j'ai ajouté mon code – gn66

Questions connexes