【问题标题】:What are considered atoms in Scheme?什么是 Scheme 中的原子?
【发布时间】:2012-09-26 20:26:05
【问题描述】:

谁能解释或链接我到任何有用的资源(我在谷歌上找不到任何线程)可以帮助我理解原子是什么。

【问题讨论】:

标签: scheme


【解决方案1】:

如今,我们认为 atom 元素不是 cons-pair 且不为 null。其中包括:

  • 数字
  • 字符串
  • 符号
  • 布尔值
  • 字符

最好用以下过程来表达,摘自《小计划者》一书:

(define atom?
  (lambda (x)
    (and (not (pair? x)) (not (null? x)))))

【讨论】:

  • “原子”不是一个很有用的概念。向量会是原子吗?我认为它不是,因为它可以包含其他“原子”,就像一对一样。然后是记录类型,SRFI-4 向量(u8vectors 非常接近字符串,但仍然由数字组成,从概念上讲,它们是“原子”)等。在 Little Schemer 的上下文中,它是有道理的,因为它只关注自身带有符号、列表和过程对象(但非常间接)。
  • 空列表 () 是否被视为原子?顺便说一句,内置的鸡计划 (atom? '()) 返回 true。
  • 根据上面的定义不,空列表不是原子。不要在这上面花太多时间,“原子”概念在现实生活中并不是很有用,它更像是一个学术概念。
  • atom 来自原始 LISP 论文,当时有两种数据类型。它要么是一对缺点,要么是一个象征。 nil 是一个符号,所以它是一个原子,但 Scheme 将布尔值 #f、符号 nil 和空列表 '() 分开了,它可以走任何路,最终不是 atom .在我的 Lisp Zozotez 中,我有 s 作为区分符号和对这两种类型的一种方式,并且具有相同的功能。现代 Scheme/CL 代码应使用 pair?/conspnull?/endp
  • 您的列表与atom? 的实现不匹配。缺少程序。
【解决方案2】:

一些作者(McCarthy 和 Friedman/Felleisen 等)使用术语“原子”来指代不是“缺点”对的数据。我声称这些天来,您更有可能将其反转,并测试“cons”-hood而不是“atom”-hood。您在哪里看到使用的术语?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-01
    • 2010-12-05
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多