以下会引发错误:
Chez Scheme Version 9.5.8
Copyright 1984-2022 Cisco Systems, Inc.
> (define-record-type point (fields x y))
> point
Exception: invalid syntax point
我指定定义了一个名为
point
的类型,但在环境中无法查找到它。如果类型没有存储在环境中,那么它存储在哪里?是否有一些隐藏的类型元环境?
记录的存储方式取决于实现,您无需了解即可使用该功能。最有可能通过语法扩展并使用现有类型来存储数据来完成。例如。他们可以使用向量,其中的字段转换为向量内的引用,并使用一些索引来指示它是一条记录以及修改后的
vector?
和 point?
将检查什么类型。
根据 R6RS,您的表达式将生成构造函数
make-point
和类型谓词 point?
。 point
不会绑定到任何东西,除非你明确指定它作为构造函数:
(define-record-type (point point point?)
(fields
(immutable x point-x)
(immutable y point-y)))
point ; ==> #<procedure point>
point? ; ==> #<procedure point?>