Syntax 为什么这是合法的(敲诈)计划?

Syntax 为什么这是合法的(敲诈)计划?,syntax,scheme,racket,htdp,Syntax,Scheme,Racket,Htdp,我在查看htdp时,在一开始的某个地方发现了这一点:- 解释为什么以下句子是非法定义: 1.(定义(f’x)x) 然而,它在球拍中工作良好: > (define (f 'x) x) > (f 'a) 3 > (define a 5) > (f a) 3 显然,我错过了一些东西。。。确切地说是什么?这一行在我的球拍中不适用:(定义(f'x)x)。报告的错误是define:不是:(quote x)中过程参数的标识符 你用什么语言?您是否尝试在交互窗口中运行上述行?简短回答:

我在查看htdp时,在一开始的某个地方发现了这一点:-

解释为什么以下句子是非法定义: 1.(定义(f’x)x)

然而,它在球拍中工作良好:

> (define (f 'x) x)
> (f 'a)
3
> (define a 5)
> (f a)
3
显然,我错过了一些东西。。。确切地说是什么?

这一行在我的球拍中不适用:
(定义(f'x)x)
。报告的错误是
define:不是:(quote x)
中过程参数的标识符


你用什么语言?您是否尝试在交互窗口中运行上述行?

简短回答:您不应该使用完整的“#lang racket”语言。教学语言去除了您所遇到的语言中可能令人困惑的高级功能

在本例中,您的定义被解释为一个名为f的函数,其中有一个名为quote的可选参数,其默认值由“x”提供


将语言级别设置为“初级学生”,您将得到更合理的答案。

我猜他之前对“x”的定义是三。因此,DrRacket教学语言的动机。全速球拍具有初学者可能会绊倒的(mis)功能。对于任何专业语言来说,情况都差不多;有关具体示例,请参见非常愚蠢的Wat演示文稿()@你是指我在之前的评论讨论中表达的怀疑吗?因为这立刻让我想起了那个讨论,让我重新思考。(另一方面,这种行为是故意的吗?)。您希望此报价转换仅在“表达式位置”中是合法的;问题是,我知道在阅读时没有“表达位置”的概念。顺便说一句,我很高兴Eli跳到这里,告诉我这是如何有用的。这应该在
#lang racket
或完整的交互中起作用。您使用的是什么
#lang
。我在
#lang racket
中的模块中获得了
扩展:未绑定标识符,这似乎是正确的结果。