为什么这个合法(球拍)计划?

aga*_*gam 3 syntax scheme racket

我正在经历htdp并在一开始就找到了这个: -

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

但是,它在球拍中工作正常:

> (define (f 'x) x)
> (f 'a)
3
> (define a 5)
> (f a)
3
Run Code Online (Sandbox Code Playgroud)

显然,我错过了什么......到底是什么?

Joh*_*nts 12

简短回答:你不应该使用完整的"#lang racket"语言.教学语言消除了您遇到的语言可能令人困惑的高级功能.

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

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

  • 那么为什么结果是"3"? (2认同)
  • 我猜他早先将'x'定义为三. (2认同)
  • 因此,DrRacket教学语言的动机.Full-on Racket具有(错误)功能,初学者可以绊倒.任何专业力量的语言几乎都是一样的故事; 有关具体的例子,请参阅非常愚蠢的**Wat**演示文稿(https://www.destroyallsoftware.com/talks/wat).:) (2认同)