Scheme 创建坐标列表的Racket中的递归性

Scheme 创建坐标列表的Racket中的递归性,scheme,racket,Scheme,Racket,我想创建一个函数,该函数返回成对的坐标列表,例如:(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

我想创建一个函数,该函数返回成对的坐标列表,例如:(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)))]))

非常感谢你。你知道如何将它存储为变量,以便在其他函数中使用吗?我不理解你的问题。将“what”事物存储为变量?您所指的“其他”函数是什么?如何生成以递归方式存储坐标列表的变量?例如:(define(generate positions rows columns)(define所有位置(for*/list([i rows][j columns])(cons i j))(let([initial state(get initial state)][end state(get end state rows columns)])(remove initial state(remove end state all positions)))恐怕问题还不清楚。请将其作为新问题发布,提供示例输入和预期输出。
(generate-positions-rec 4 3)
=> '((4 . 3) (3 . 2) (2 . 1))