所以,我的大脑被炸掉了,在课堂上,我们正在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)
...
由于您可以将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)