【发布时间】:2018-11-15 16:48:13
【问题描述】:
我正在尝试创建一个过程,该过程采用 lambda 列表,并使用这些 lambda 的返回值。为了创建和填充此列表,我制作了以下程序:
(define generate-list-of-numbers-lambdas
(lambda (function)
(if (= (function) 3)
(list (lambda () 2))
(cons (lambda () (- (function) 1))
(generate-list-of-numbers (lambda () (- (function) 1)))))))
这个过程接受一个过程作为参数,并从参数过程的返回值生成一个数字列表,直到2(IE原始参数是一个返回20的过程,generate-list-of -numbers 列出(19 18 17... 3 2)
这个过程接受一个过程作为参数(参数过程本身没有参数,只返回一个整数),但是,这个generate-list-of-numbers-lambdas 过程生成一个列表,但只有第一个元素是一个 lambda。
【问题讨论】:
-
仔细研究你的递归调用。
-
我在尝试使用它时遇到错误。递归调用的名称不正确,
generate-list-of-numbers应该是generate-list-of-numbers-lambdas。我猜您没有收到错误,因为您还有一个使用该名称返回数字而不是 lambdas 的过程。 -
如果你改正了那个错字就可以了。
-
这个问题令人困惑。如果您真的想创建一个采用“lambda 列表”的过程,为什么它的参数是一个被调用以获得其返回值的函数?当我们说“一个函数需要”时,它指的是进入的参数值。
-
"...并使用这些 lambdas 的返回值"。以什么方式?计算什么返回值或产生什么输出?