在Racket中用于获取此类内容的主要工具是各种for循环.假设您要创建基于列表的矩阵结构,那么这是获取它的一种方法:
#lang racket
(define (foo x y)
(for/list ([i y])
(for/list ([j x])
(list (add1 i) (add1 j)))))
Run Code Online (Sandbox Code Playgroud)
而且由于人们提出了如何foo创建任何维度的矩阵的更一般的问题,这里是一个适用于任意数量的参数的通用版本,并且在调用时仍然返回相同的结果(foo 3 2):
#lang racket
(define (foo . xs)
(let loop ([xs (reverse xs)] [r '()])
(if (null? xs)
(reverse r)
(for/list ([i (car xs)])
(loop (cdr xs) (cons (add1 i) r))))))
Run Code Online (Sandbox Code Playgroud)
(注意BTW,在这两种情况下,我都使用简单的基于0的迭代,并用来add1获得你想要的数字.另一种方法是替换
(for/list ([i x]) ... (add1 i) ...)
Run Code Online (Sandbox Code Playgroud)
同
(for/list ([i (in-range 1 (add1 x)]) ... i ...)
Run Code Online (Sandbox Code Playgroud)
)