我正在通过htdp并在一开始的某个地方发现了这个:-
解释为什么以下句子是非法定义: 1. (define (f 'x) x)
但是,它在球拍中运行良好:
> (define (f 'x) x)
> (f 'a)
3
> (define a 5)
> (f a)
3
显然,我错过了一些东西......究竟是什么?
简短的回答:您不应该使用完整的“#lang racket”语言。教学语言去除了您遇到的语言可能令人困惑的高级功能。
在这种情况下,您的定义被解释为一个名为 f 的函数,带有一个名为 quote 的可选参数,其默认值由“x”提供。
将语言级别设置为Beginning Student,您将得到更合理的答案。
这条线在 Racket: 中对我不起作用(define (f 'x) x)
。报告的错误是define: not an identifier for procedure argument in: (quote x)
。
您使用什么语言?您是否尝试在交互窗口中运行上述行?