将向量转换为列表,然后转换为Racket中的图像

将向量转换为列表,然后转换为Racket中的图像,racket,Racket,所以,我的大脑被炸了,在课堂上,我们正在研究康威的《在DrRacket里的生活游戏》。这是CS课程的介绍,所以这对我来说很难,因为编码对我来说是非常新的 我以前在动画中使用过列表,但我不知道如何将向量转化为图像。我们的教授给了我们把一个向量变成一个列表的提示,然后我们应该能够创建图像。我可以把向量变成一个列表,但是我会迷路。非常感谢任何帮助、指导或建议 这不是全部代码,只是一个示例 (define small-board (vector (vector

所以,我的大脑被炸了,在课堂上,我们正在研究康威的《在DrRacket里的生活游戏》。这是CS课程的介绍,所以这对我来说很难,因为编码对我来说是非常新的

我以前在动画中使用过列表,但我不知道如何将向量转化为图像。我们的教授给了我们把一个向量变成一个列表的提示,然后我们应该能够创建图像。我可以把向量变成一个列表,但是我会迷路。非常感谢任何帮助、指导或建议

这不是全部代码,只是一个示例

(define small-board (vector
                     (vector 1 0)
                     (vector 0 1))
  )

(define live-square (square 10 "solid" "blue"))
(define dead-square (square 10 "solid" "red"))

;Purpose: Create a function that turns board into an image
;Signature: Vector of Vectors -> Image
;Example
(check-expect (board->image small-board)
              (above (beside live-square dead-square)
                     (beside dead-square live-square))
              ) 

;Code
(define (board->image brd)
...

因为可以将2d向量转换为2d列表,所以我可以演示如何将2d列表转换为图像

(require 2htdp/image)

(define small-board (vector (vector 1 0) (vector 0 1)))
(define small-board-as-list (list (list 1 0) (list 0 1)))

(define live-square (square 10 "solid" "blue"))
(define dead-square (square 10 "solid" "red"))
(define MT empty-image)
在棋盘上重现,并将每个渲染行置于渲染棋盘其余部分之上。在辅助对象中,在行上重复出现,并将每个渲染的单元格放在行的渲染“其余”旁边

; [List-of [List-of (U 1 0)]] -> Image
(define (board->image b)
  (cond [(empty? b) MT]
        [else (above (row->image (first b))
                     (board->image (rest b)))]))
; [List-of (U 1 0)] -> Image
(define (row->image r)
  (cond [(empty? r) MT]
        [else (beside (cell->image (first r))
                      (row->image (rest r)))]))

; Cell -> Image
(define (cell->image c)
  (if (= 1 c) live-square dead-square))
递归结构可以使用
foldr
进行抽象:

; [List-of [List-of (U 1 0)]] -> Image
(define (board->image-abs.v1 b)
  (foldr (λ (r b) (above (foldr (λ (c r) (beside (cell->image c) r)) MT r) b)) MT b))
我们还可以使用
map
apply

; [List-of [List-of (U 1 0)]] -> Image
(define (board->image-abs.v2 b)
  (apply above (map (λ (r) (apply beside (map (λ (c) (cell->image c)) r))) b)))
结果

(board->image small-board-as-list)
(board->image-abs.v1 small-board-as-list)
(board->image-abs.v2 small-board-as-list)


这太不可思议了。非常感谢你!