首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(列出lambda lambda)

(列出lambda lambda)
EN

Stack Overflow用户
提问于 2012-10-19 06:18:28
回答 2查看 300关注 0票数 3

如果我这样做,我会得到什么样的“东西”?

代码语言:javascript
复制
(car (list lambda lambda))

我想我会把lambda带回来的这意味着我可以

代码语言:javascript
复制
(define my_lambda (car (list lambda lambda)))
(define foo (my_lambda (n) (+ n n)))

但这并不管用!谢谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-19 06:28:46

lambda是一种特殊形式(意思是:标准计算规则不适用于它),是语言核心原语的一部分,并且不是可以赋给变量的符号或其他类型的值。

在回答您的问题时,您在计算表达式(list lambda)之后得到的“某种东西”将取决于您正在使用的方案解释器,但通常您会得到一个错误。例如,DrRacket这样抱怨:

代码语言:javascript
复制
lambda: bad syntax in: lambda
票数 5
EN

Stack Overflow用户

发布于 2012-10-19 09:14:21

从某种意义上说,lambda在运行时并不存在(当然,由lambda语句创建的函数是存在的,但这是另一回事;它们不是lambda本身)。

这样做的原因是,lambda语句操作在运行时不存在的其他内容;特别是,它更改了变量名(在您的示例中为n)的含义。

要回答你关于lambda是什么类型的问题,通常的答案是“语法”。幸运的是,Scheme提供了一种对语法进行抽象的机制:宏。宏可以抽象为编译时唯一的实体,如变量名、lambdas和其他宏。因此,您可以这样写(在这个例子中,在球拍REPL中):

代码语言:javascript
复制
> (define-syntax-rule (mylambda (x ...) body)
    (lambda (x ...) body))
> (define foo (mylambda (n) (+ n n)))
> (foo 71)
142

有多种定义Scheme宏的系统;syntax-rules系统以一种不同寻常但最终相当直观的方式使用...。还可以通过编写发出Scheme的Scheme代码来定义宏,这涉及到稍微复杂一些的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12964628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档