DrRacket 中参考悬停上图形问号的含义?

Meaning of graphical question-mark on reference hover in DrRacket?

在 DrRacket GUI 中,将鼠标悬停在符号上通常会在该符号和文件中该符号的其他用途之间生成一条图形线,或者从该符号到该符号的导入源之间生成一条线。有时(但不总是),图形线伴随着图形问号(不是文本问号),如下图所示(仔细查看线的底部;问号在黑色背景上呈深紫色背景,所以很难看到,但它/就/在那里)。那个问号是什么意思?

DrRacket 在绑定(定义、本地绑定、导入等)和对该绑定的引用之间绘制一个蓝色箭头(无问号)。

它在语法模板中的绑定和可能的引用之间绘制了一个带有问号的紫色箭头。问号是提醒

  • 标识符的出现可能不会用作参考
  • 即使是,它也可能引用另一个绑定

这是一个愚蠢的例子:

#lang racket

(define-syntax-rule (define-undivider fname divisor)
  (define (fname quotient remainder)
    (println (list 'quotient quotient 'remainder remainder))
    (+ (* divisor quotient) remainder)))

(define-undivider f 10)
(f 2 5)  ;;=> 25

quotientremainder 的某些用法根本不是引用,因为它们出现在 quote 表达式中。其他是引用,但它们引用函数的参数而不是 Racket 函数。 DrRacket 无法仅通过查看宏定义来判断这一点(这比您想象的要难),因此它将明显的绑定关系标记为“可能”。