如果我这样做,我会得到什么样的“东西”?
(car (list lambda lambda))我想我会把lambda带回来的这意味着我可以
(define my_lambda (car (list lambda lambda)))
(define foo (my_lambda (n) (+ n n)))但这并不管用!谢谢,
发布于 2012-10-19 06:28:46
lambda是一种特殊形式(意思是:标准计算规则不适用于它),是语言核心原语的一部分,并且不是可以赋给变量的符号或其他类型的值。
在回答您的问题时,您在计算表达式(list lambda)之后得到的“某种东西”将取决于您正在使用的方案解释器,但通常您会得到一个错误。例如,DrRacket这样抱怨:
lambda: bad syntax in: lambda发布于 2012-10-19 09:14:21
从某种意义上说,lambda在运行时并不存在(当然,由lambda语句创建的函数是存在的,但这是另一回事;它们不是lambda本身)。
这样做的原因是,lambda语句操作在运行时不存在的其他内容;特别是,它更改了变量名(在您的示例中为n)的含义。
要回答你关于lambda是什么类型的问题,通常的答案是“语法”。幸运的是,Scheme提供了一种对语法进行抽象的机制:宏。宏可以抽象为编译时唯一的实体,如变量名、lambdas和其他宏。因此,您可以这样写(在这个例子中,在球拍REPL中):
> (define-syntax-rule (mylambda (x ...) body)
(lambda (x ...) body))
> (define foo (mylambda (n) (+ n n)))
> (foo 71)
142有多种定义Scheme宏的系统;syntax-rules系统以一种不同寻常但最终相当直观的方式使用...。还可以通过编写发出Scheme的Scheme代码来定义宏,这涉及到稍微复杂一些的问题。
https://stackoverflow.com/questions/12964628
复制相似问题