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