我正在阅读Rosette Essentials。
该指南解释了使用define-symbolic
:
define-symbolic
每次计算时,该表单都会将变量绑定到相同的(唯一的)[符号]常量。
(define (static)
(define-symbolic x boolean?) ; Creates the same constant when evaluated.
x)
(define (dynamic)
(define-symbolic* y integer?) ; Creates a fresh constant when evaluated.
y)
> (eq? (static) (static))
#t
> (eq? (dynamic) (dynamic))
(= y$1 y$2)
打印的常量名称,例如
x
orb
,只是注释。通过评估两个不同的define-symbolic
(或,define-symbolic*
)形式创建的两个 [符号] 常量是不同的,即使它们具有相同的打印名称。它们可能仍然代表相同的具体值,但这由求解器确定:
(define (yet-another-x)
(define-symbolic x boolean?)
x)
> (eq? (static) (yet-another-x))
(<=> x x)
我真的不明白的解释define-symbolic
:
为什么(eq? (static) (static))
返回#t,但(eq? (static) (yet-another-x))
返回(<=> x x)
?
由于每次评估时都会define-symbolic
将变量绑定到相同的(唯一)常量,为什么不返回?,就像?(eq? (static) (yet-another-x))
#t
(eq? (static) (static))
这是否意味着两个符号变量出现在不同的范围内并具有相同的名称仍然不同,即使我们使用define-symbolic
?
<=>
和有什么区别=
?例如(<=> x x)
与(= y$1 y$2)
。
谢谢。