【发布时间】:2019-10-30 15:03:36
【问题描述】:
我正在用 dr Racket 编写一个方案程序,它采用代表矩阵的数字列表将列表中的项目设置为给定的数字。到目前为止,它适用于案例第 1 列第 1 列,并且知道将数字放在哪里,但任何其他案例都会列出列表。我试图创建一个函数来帮助,但仍然收到同样的错误。任何帮助将不胜感激。 我得到的错误:
(setCell 矩阵 2 2 9) ((2 4 6 8) (1 (9 5 7)) (2 9 0 1))
我需要
(setCell 矩阵 2 2 9) ((2 4 6 8) (1 9 5 7) (2 9 0 1))
任何帮助将不胜感激。
(define Matrix '(( 2 4 6 8 )( 1 3 5 7)( 2 9 0 1)))
;getCell Matrix Row Column
;if i want row 2 col 2
(define (getCell Matrix Row Column)
(if (= Row 1)
(if (= Column 1)
(car (car Matrix))
(getCell (cons (cdr (car Matrix)) ()) Row (- Column 1))
)
(getCell (cdr Matrix) (- Row 1) Column)
)
)
;> (getCell Matrix 1 1)
;2
;(define Matrix '(( 2 4 6 8 )( 1 3 5 7)( 2 9 0 1)))
;setCell Matrix Row Column Item
(define (setCell Matrix Row Column Item)
(if (= Row 1)
(if (= Column 1)
(helpMe Matrix Item)
(cons
(cons (car (car Matrix))
(setCell (cons (cdr (car Matrix)) ()) Row (- Column 1) Item))
(cdr Matrix))
)
(cons (car Matrix) (setCell (cdr Matrix) (- Row 1) Column Item))
)
)
(define (helpMe Matrix Item)
(cons (cons Item (cdr (car Matrix))) (cdr Matrix)))
;ERROR:
;>(setCell Matrix 2 2 9)
;((2 4 6 8) (1 (9 5 7)) (2 9 0 1))
;> (setCell Matrix 1 1 9)
;((9 4 6 8) (1 3 5 7) (2 9 0 1))
【问题讨论】: