Racket 中的递归性以创建坐标列表
Recursivity in Racket to create a list of coordinates
我想创建一个函数,该函数 returns 成对形式的坐标列表,例如:(0.0) (0.1)...(rows.columns)。它进入无限循环,我不知道为什么。有什么建议吗?
(define (generate-positions-rec rows columns)
(cond [(and (= rows 0) (= columns 0)) empty]
[else (cons rows columns)
(generate-positions-rec (- rows 1)(- columns 1))]
))
如果使用负数调用代码或其中一个参数大于另一个,您的代码将进入递归循环。我们可以通过适当的基本案例解决此问题。
但您实际上并未构建 列表作为输出,对cons
的调用已丢失。这就是你想要做的,注意你如何需要 cons
新的一对坐标到递归调用的结果:
(define (generate-positions-rec rows columns)
(cond [(or (<= rows 0) (<= columns 0)) empty]
[else (cons (cons rows columns)
(generate-positions-rec (- rows 1)(- columns 1)))]))
现在是这样工作的:
(generate-positions-rec 4 3)
=> '((4 . 3) (3 . 2) (2 . 1))
我想创建一个函数,该函数 returns 成对形式的坐标列表,例如:(0.0) (0.1)...(rows.columns)。它进入无限循环,我不知道为什么。有什么建议吗?
(define (generate-positions-rec rows columns)
(cond [(and (= rows 0) (= columns 0)) empty]
[else (cons rows columns)
(generate-positions-rec (- rows 1)(- columns 1))]
))
如果使用负数调用代码或其中一个参数大于另一个,您的代码将进入递归循环。我们可以通过适当的基本案例解决此问题。
但您实际上并未构建 列表作为输出,对cons
的调用已丢失。这就是你想要做的,注意你如何需要 cons
新的一对坐标到递归调用的结果:
(define (generate-positions-rec rows columns)
(cond [(or (<= rows 0) (<= columns 0)) empty]
[else (cons (cons rows columns)
(generate-positions-rec (- rows 1)(- columns 1)))]))
现在是这样工作的:
(generate-positions-rec 4 3)
=> '((4 . 3) (3 . 2) (2 . 1))