这些嵌套向量是如何连接的? [英] How are these nested vectors connected?

查看:45
本文介绍了这些嵌套向量是如何连接的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一段代码,它创建了一个向量记分板",其中包含 3 个大小为 3 的独立向量,所有向量都包含符号 ?在所有指数 0-2.当我现在执行向量集!"在记分牌的第一个向量上,要将其第一个元素更改为 'X,向量 2 和 3 也将更改.这是怎么发生的?

I've written a piece of code, which creates a vector 'scoreboard' that contains 3 seperate vectors of size 3, all containing the symbol ? at all indices 0-2. When i now execute a 'vector-set!' on the first vector of scoreboard, to change its first element to a 'X, vectors 2 and 3 will change too. How does this occur?

(define scoreboard (make-vector 3 (make-vector 3 '?)))
(define (display-scoreboard)
(display (vector-ref scoreboard 0))
(newline)
(display (vector-ref scoreboard 1))
(newline)
(display (vector-ref scoreboard 2))
(newline))

(define (X! pos)
(cond
((>= 3 pos) (vector-set! (vector-ref scoreboard 0) (- pos 1) 'X))
))

(display-scoreboard)
(X! 1)
(newline)
(display-scoreboard)

输出:

#(? ? ?)
#(? ? ?)
#(? ? ?)

#(X ? ?)
#(X ? ?)
#(X ? ?)

所需的输出:

#(? ? ?)
#(? ? ?)
#(? ? ?)

#(X ? ?)
#(? ? ?)
#(? ? ?)

推荐答案

图像显示 (make-vector 3 (make-vector 3 '())) 创建了一个向量在所有三个插槽中都具有相同的行(向量).

The image shows that (make-vector 3 (make-vector 3 '())) creates a vector that has the same row (vector) in all three slots.

改为写(vector (vector (vector '() '() '()) (vector '() '() '()) (vector '() '() '())).或者做一个小助手函数:

Instead, write (vector (vector '() '() '()) (vector '() '() '()) (vector '() '() '())). Or make a little helper function:

(define (make-row) (vector '() '() '()))
(vector (make-row) (make-row) (make-row))

这篇关于这些嵌套向量是如何连接的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆