垂直条可以用作Racket中标识符的一部分吗?

时间:2015-11-26 10:40:58

标签: racket

我想在Racket中为量子态定义一个变量,按惯例写成:

foo+bar

Reader reference告诉我这是不可能的,因为:

  

<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> 开始将字符的子序列逐字地包含在分隔的序列中

但是,我很惊讶地发现页面"Special characters" in Rosetta Code,在#34; Racket&#34;部分中,提及:

  

竖条可用作其周围使用的标识符引用

这是一个糟糕的表述还是Racket中的变量名实际上是否会以某种方式使用竖线?有人可以举个例子吗?

提前致谢。

3 个答案:

答案 0 :(得分:4)

垂直条是一种避免语言阅读器对其中字符进行常规解释的方法。因此,它可用于定义其中包含特殊字符的符号,例如:

(define |(| 5)

(+ |(| 1)  ;   produces 6

您始终可以使用反引号在符号中插入竖线(请参阅manual),例如,您可以编写符号\|0>,这将在内部解释为{{1} }。但是在源文件中,您必须始终使用|0>而不是\|0>。或者,为了避免这种情况,您可以使用extension更改标准阅读器。

但我认为在“标准”球拍中使用带有|0>的垂直条的符号没有简单的方法,因为垂直条由其读者以特殊方式处理。

答案 1 :(得分:1)

您可以使用| [u + 01c0]或ǀ [u + 05c0]或׀ [u +]而不是 [u + 007C] 2223]或 [u + 2758]。

答案 2 :(得分:0)

有趣的是,我也不知道。通过一些快速实验,这是我在定义一些变量然后在DrRacket的REPL中调用它们时发现的:

(define a|| 3)
(define |b| 2)
(define ||c 5)
(define ||||d 7)
(define f|d| 9)

> a||
3
> a
3
> |b|
2
> d
7
> |d|
7
> f||d
9
> fd
9

(define |e 8)(define |e|| 1)例如,您收到错误消息:

  

模块语言:模块文本无效。 。读:不平衡`|&#39;

如果你想做

(define ||||d 5)
(define |d| 9)

您也会收到错误:

  

模块:标识符的重复定义:d

所以你只需要使用偶数|,所有其他字符必须不一样,你就可以了。