Types 此图能否说明R5RS方案基本数据类型之间的关系?

Types 此图能否说明R5RS方案基本数据类型之间的关系?,types,scheme,Types,Scheme,我试图画一个图表来描述R5RS方案基本数据类型之间的关系,以便 a) 当我试图排除一些特殊情况时,提醒自己 b) 与其他人分享,如果他们感兴趣的话 但是我不确定是否存在任何误解/非标准术语,或者是否有更好的在线图表来说明相同的想法 谢谢你的帮助 在接受了@ChrisJester Young的建议后,我重新绘制了图表,希望这次我能接近它。:) 修订2 我认为,如果使用外部表示而不是代码片段,就不会那么容易混淆了。然后你就可以取消所有的引用 基本上,点对的外部表示是(foo.bar),其

我试图画一个图表来描述R5RS方案基本数据类型之间的关系,以便

  • a) 当我试图排除一些特殊情况时,提醒自己
  • b) 与其他人分享,如果他们感兴趣的话
但是我不确定是否存在任何误解/非标准术语,或者是否有更好的在线图表来说明相同的想法

谢谢你的帮助


在接受了@ChrisJester Young的建议后,我重新绘制了图表,希望这次我能接近它。:)


修订2


我认为,如果使用外部表示而不是代码片段,就不会那么容易混淆了。然后你就可以取消所有的引用

基本上,点对的外部表示是
(foo.bar)
,其中
foo
位于车槽中,
bar
位于点对的cdr槽中

最重要的是,你有列表。列表有三种:正确的、不正确的和循环的

适当的列表是:

  • 空列表或列表结束特殊对象,
    ()
    ,或
  • 将cdr插槽设置为另一个正确列表的虚线对
示例:
(1234)
(与
(1234.()相同)

不正确的列表是:

  • 既不是点对也不是空列表的对象
    ()
    对象,或
  • 将cdr插槽设置为另一个不正确列表的虚线对
示例:
(1234)

通告名单如下:

  • 一个点对,当追踪连续的CDR时,您永远不会到达一个非点对对象

示例:
#0=(1234.#0#)
(12.#1=(34.#1#))

我可以理解使用“外部表示”而不是“代码片段”,它的变化更少,让我把重点放在输出上。至于“不正确的列表”,您的定义似乎暗示像符号这样的原子数据类型,数字或字符串可以归类为不正确的列表类别,我的理解正确吗?到目前为止,我还没有阅读或使用任何循环列表。。。谢谢你的解释。是的,原子(空列表除外)确实是不正确列表的基本情况。您可以使用's
circularlist
函数或's
readwithsharedstructure
创建循环列表!在绿色框中,您应该说“其cdr是正确列表的虚线对”。