如何根据输入编写一个返回'n'函数列表的函数

时间:2017-03-19 02:26:30

标签: lambda scheme racket

我正在寻找创建一个函数,该函数返回一个'n'个函数列表,每个函数的输入分别增加1,2,3 ... n。

我使用DrRacket试试这个。预期结果的样本:

> (map (lambda (f) (f 20)) (func-list 5))
(21 22 23 24 25)

我能够以静态方式写下来:

> (define (func-list num)
> (list (lambda (x) (+ x 1)) (lambda (x) (+ x 2)) (lambda (x) (+ x 3)) (lambda (x) (+ x 4)) (lambda (x) (+ x 5)))

[编辑]

此外,对实施也有一些限制:

  1. 只能使用'cons'和算术运算
  2. func-list应该只作为输入一个参数('n'是在这种情况下要返回的函数的数量)
  3. 如果有人可以帮助我,那将是很棒的。提前谢谢。

1 个答案:

答案 0 :(得分:0)

不是明确地写出列表,更好的方法是递归为任意n构造它,如下所示:

(define (func-list n)
  (define (func-lst a n)
    (if (> a n)
        empty
        (cons (lambda (x) (+ x a))
              (func-lst (add1 a) n))))
  (func-lst 1 n))

例如:

> (map (lambda (f) (f 20)) (func-list 0))
'()
> (map (lambda (f) (f 20)) (func-list 5))
'(21 22 23 24 25)