2017-03-05 90 views
1

我想从列表中更改一个值,然后用另一个参数“返回”listh中的整个列表。我能够达到这个价值,但是我不知道如何在这个变化的情况下返回列表清单。状态由((获取板状态)(get-xycoordinate状态)(获取取向状态))组成。 get-board返回板,get-xycoordinate返回(x,y),get-xcoordinate返回x个位置。计划 - 如何替换/更改列表中的某个位置中的元素

(define (get-board state) 
'(
(0 0 0 0 0 0) 
(0 0 0 0 0 0) 
(0 0 0 0 0 0) 
(0 0 0 0 0 0) 
(0 0 0 0 0 0) 
)) 


(define (put-mark state) 
((+ (list-ref (list-ref (get-board state) (get-xcoordinate state)) (get-ycoordinate state)) 1) (get-xycoordinate state) (get-orientation state))) 

在此先感谢!

回答

0

这里是一个解决方案

(define (set-list xs i x) 
    (cond 
    [(empty? xs) '()] 
    [(= i 0)  (cons x 
         (cdr xs))] 
    [else  (cons (car xs) 
         (set-list (cdr xs) (- i 1) x))])) 

(define (set-matrix xss i j x) 
    (cond 
    [(empty? xss) '()] 
    [(= i 0)  (cons (list-set (car xss) j x) 
         (cdr xss))] 
    [else   (cons (car xss) 
         (set-matrix (cdr xss) (- i 1) j x))])) 


(set-list '(a b c d e f) 3 'x) ; => '(a b c x e f) 


(set-matrix '((a b c d) 
       (e f g h) 
       (i j k l) 
       (m n o p)) 
      2 3 
      'x) 
; '((a b c d) 
; (e f g h) 
; (i j k x) 
; (m n o p)) 
+0

谢谢!那正是我需要的! –