我必须在 Scheme 中定义一个采用以下形式的可变参数函数:(define (n-loop procedure [a list of pairs (x,y)])
其中对的列表可以是任意长度。
每对指定一个下限(包括)和上限(不包括)。也就是说,以下函数调用:(n-loop (lambda (x y) (inspect (list x y))) (0 2) (0 3))
产生:
(list x y) is (0 0)
(list x y) is (0 1)
(list x y) is (0 2)
(list x y) is (1 0)
(list x y) is (1 1)
(list x y) is (1 2)
现在,我之前曾发布过这个主题,并得到了很好的帮助。但是,我得到了新的指导方针来遵守。只能使用嵌套地图找到解决方案。
我一直在做的方法如下:找到由第一组边界指定的所有值(在示例中,(0 1 2)
)。这可以通过一个名为(enumerate lowBound highBound)
. 然后,我需要获取这些数字中的每一个,并在下一组 bounds 中对每个数字进行 cons (0 1 2 3)
,从而得到((0 0) (0 1) (0 2) (0 3) (1 0)...)
.
我写到这里的内容如下:
(define (n-loop op . pairs)
(apply op (generate pairs))
)
(define (generate pairs)
(map (lambda (x) (cons x (generate (cdr pairs))))
(map (lambda (x) (enumerate (car x) (cadr x))) pairs))
)
但是对于给定的数字,这(0 1 0 1 2 0 1 2 0 1 2)
会在我需要时输出((0 0) (0 1) (0 2) (0 3) (1 0)...)
。这是一个讨厌的问题。有没有人有任何见解?