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

问题描述 投票:0回答:1

所以,我的大脑被炸掉了,在课堂上,我们正在Drake的Conway的《生命游戏》中进行研究。这是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)
...
racket
1个回答
0
投票

由于您可以将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))

我们也可以使用mapapply

; [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)

enter image description here

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.