syntax - 为什么这是合法的( Racket )计划?

标签 syntax scheme racket htdp

我正在浏览 htdp 并在一开始的某个地方发现了这个:-

Explain why the following sentences are illegal definitions: 1. (define (f 'x) x)



但是,它在 Racket 中运行良好:
> (define (f 'x) x)
> (f 'a)
3
> (define a 5)
> (f a)
3

显然,我遗漏了一些东西......究竟是什么?

最佳答案

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

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

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

关于syntax - 为什么这是合法的( Racket )计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612098/

相关文章:

java - 使用父类(super class)引用调用重载的继承方法

scala - Scala 中带有方括号的私有(private)作用域 (private[...])

c - 为什么 'dereference' 和 'address of' 运算符在左边?

c# - 静态只读字段不能分配给(静态构造函数除外)

list - 如何在 Racket (方案)中将列表分成均匀大小的 block ?

fonts - 更改涂鸦文档中的字体大小

scheme - Little Schemer atom vs (quote atom)

data-structures - 这个简单的纯功能队列有效吗?

emacs - 我如何让emacs像缩进定义一样缩进其他内容?

list - 在 Scheme/Racket 中向左旋转列表