Answers:
我不熟悉Barry Jay的最新作品,但他的较旧作品包含您在Lisp中无法完成的工作,因为这些类型提供了更多信息。
例如,假设您要定义Lisp数据结构的大小。对于一个原子,它是1;对于一个n 个原子的列表,它是n;更一般地,它的size(x)+ size(y)(cons x y)
。
现在将各种类型混合在一起。列表的大小就是它的长度。现在原子列表的大小是多少?如果您将此数据结构视为一个列表(其元素恰好是原子列表),那么答案就是列表的长度。如果您认为此数据结构包含恰好存储在列表列表中的原子,那么答案就是元素列表长度的总和。
类型使您可以区分原始数据的这两个视图(形状)。您需要一个可以区分(列表)(列表原子)和(列表列表)(原子)的类型系统。这种区别的最常见实现是使用类型类(如Haskell中那样)。