使用build-list在Racket中创建一个n x n板

时间:2014-11-25 15:39:38

标签: list function racket

所以我正在尝试构建一个函数,在该函数中,它根据输入的维度在板上创建一个位置列表。

(定义(创建板尺寸)...)

其中维度是1到9之间的数字。

因此,输出将是一个电路板位置列表列表,其中电路板位置为2位数字,第一个数字是行号,第二个是列号。

示例:

(创建板3) - > (清单11 12 13)(清单21 22 23)(清单31 32 33)))

此外,这应该是在没有递归或辅助函数的情况下完成的,只有抽象列表函数。

1 个答案:

答案 0 :(得分:1)

在Racket中,使用iterations and comprehensions是一个非常惯用的解决方案:

(define (create-board dim)
  (for/list ([i (in-range 1 (add1 dim))])
    (for/list ([j (in-range 1 (add1 dim))])
      (+ (* 10 i) j))))

或者,仅使用基本列表程序:

(define (create-board dim)
  (map (lambda (i)
         (map (lambda (j) 
                (+ (* 10 i) j))
              (build-list dim add1)))
       (build-list dim add1)))

例如:

(create-board 3)
=> '((11 12 13) (21 22 23) (31 32 33))