【问题标题】:How write a function that returns a list of 'n' functions based on an input如何编写一个基于输入返回“n”个函数列表的函数
【发布时间】:2017-03-19 02:26:29
【问题描述】:

我正在寻找一个返回“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' 是在这种情况下要返回的函数的数量)

如果有人可以帮助我,那就太好了。提前致谢。

【问题讨论】:

    标签: lambda scheme racket


    【解决方案1】:

    与其显式写出列表,更好的方法是递归为任意 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) 现在应该满足您的两个限制。
    • 太棒了。非常感谢。
    猜你喜欢
    • 2013-09-16
    • 2012-12-25
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多