(define (operation op-list n)
(list (lambda (x) (+ (car x) (cdr x))))
>(define plus (operation (list 1 2 3 4) 1))
>(plus (list 1 2))
如何将列表的正确语法作为lambda的参数? Racket-Error:“应用程序:不是程序”
答案 0 :(得分:0)
那么,让我们来看看你在这里做了些什么。 您可以使用2个参数定义一个名为operation的过程,该过程返回包含lambda的列表。
然后,您将加号定义为(operation (list 1 2 3 4) 1)
,其评估为包含lambda的列表,如前所述。
然后,您尝试使用另一个列表作为参数调用此列表。
因此'不是程序'。
您要做的是folding。 虽然你似乎并不完全理解列表是如何工作的,所以我建议你先阅读。
答案 1 :(得分:0)
您的问题有点不清楚,但我假设您正在寻找如何将列表放入lambda表达式。 (define (operation x y) (append x y)) (operation (list 1 2)(list 3 4)
只是((lambda (x y) (append x y))(list 1 2)(list 3 4))
的语法糖。这个例子是为了解释这些功能是如何工作的。但是,如果从过程中删除函数调用,则它不会将值计算为值,而是过程。
(define (operation op-list n) (list (lambda (x) (+ (car x) (cdr x))))
如果我按照我提到的规则将其分解,我们可以看到该操作接受了2个未使用的变量,并将程序放入列表中。
(define plus (operation (list 1 2 3 4) 1))
(plus (list 1 2))
如果我们看看plus,它不是一个函数,因为它没有任何函数调用。因此,当您致电(plus (list 1 2)
时出现错误,其中plus是应用程序而不是proccedure。