2012-03-08 57 views
3

我正在经历HTDP,发现这个地方的开头: -为什么这是合法的(球拍)计划?

解释为什么下面的句子是非法的定义: 1.(定义(F“x)x)

然而,它可以在球拍中正常工作:

> (define (f 'x) x) 
> (f 'a) 
3 
> (define a 5) 
> (f a) 
3 

显然,我错过了什么......究竟是什么?

回答

12

简答:您不应该使用完整的“#lang racket”语言。教学语言删除了您遇到的语言的潜在混淆高级功能。

在这种情况下,您的定义被解释为一个名为f的函数,其中有一个可选的参数称为quote,其默认值由'x'提供。

将语言级别设置为Beginning Student,您将得到更合理的答案。

+2

那么为什么结果是'3'? – leppie 2012-03-08 03:14:20

+2

我猜他早就把'x'定义为三。 – 2012-03-08 04:30:37

+2

这真是莫名其妙。 – JasonFruit 2012-03-08 16:24:00

0

此行确实不是在Racket中为我工作:(define (f 'x) x)。报告的错误是define: not an identifier for procedure argument in: (quote x)

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

+0

这应该在'#lang racket'或完整的交互中起作用。你用的是什么'#lang'。 – 2012-03-09 01:38:54

+0

我在'#lang racket'中得到'expand:unbound identifier in module in:x',这似乎是正确的结果。 – 2012-04-13 05:33:57