Lambda 如何编写返回';n';基于输入的函数

Lambda 如何编写返回';n';基于输入的函数,lambda,scheme,racket,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)) (la

我想创建一个函数,它返回一个“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)))
[编辑]

此外,还对实施施加了一些限制:

  • 只能使用“cons”和算术运算
  • func列表应只接受一个参数作为输入(“n”是本例中要返回的函数数)

  • 如果有人能帮我,那就太好了。提前感谢。

    不是显式地写出列表,更好的方法是递归地为任意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)
    

    与其显式写出列表,更好的方法是递归地为任意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)
    

    谢谢你的回答。我在这里有一些限制,我忘了在我的问题中提到。1.func list应该只接受一个参数作为输入(在这种情况下,它必须返回的函数数为'n')。我已经编辑了上面的
    func list
    ,以接受单个参数(基本上使其成为以前版本的包装器)<代码>(func list n)现在应该满足这两个限制。太棒了。非常感谢。谢谢你的回答。我在这里有一些限制,我忘了在我的问题中提到。1.func list应该只接受一个参数作为输入(在这种情况下,它必须返回的函数数为'n')。我已经编辑了上面的
    func list
    ,以接受单个参数(基本上使其成为以前版本的包装器)<代码>(func list n)现在应该满足这两个限制。太棒了。谢谢。