有没有办法比较它们?例如,这不起作用:
(equal? (flat-contract integer?) (flat-contract integer?))
Run Code Online (Sandbox Code Playgroud)
对于某些类型的合同,您可以使用contract-equivalent?:
> (contract-equivalent? (flat-contract integer?) (flat-contract integer?))
#true
> (contract-equivalent? (and/c integer? positive?) (and/c integer? positive?))
#true
> (contract-equivalent? (or/c integer? string?) (or/c string? integer?))
#true
Run Code Online (Sandbox Code Playgroud)
#true当合同系统证明它们是等价的时,这将返回.
但是,正如文档所指出的那样,#false结果并不意味着它们不等同,它只是意味着它不知道:
这个函数是保守的,所以
#false当c1它实际上接受同一组值时它可能会返回c2.
> (contract-equivalent? integer? integer?)
#true
> (contract-equivalent? (lambda (x) (integer? x))
(lambda (x) (integer? x)))
#false
Run Code Online (Sandbox Code Playgroud)