Scheme和Clojure没有原子类型谓词 - 这是设计的吗?

haw*_*eye 13 lisp scheme elisp predicate clojure

常见的LISP和Emacs LISP具有原子类型谓词.Scheme和Clojure没有它.http://hyperpolyglot.wikidot.com/lisp

是否存在设计原因 - 或者它不是包含在API中的基本功能?

mik*_*era 14

在Clojure中,原子谓词并不那么重要,因为Clojure强调各种其他类型的(不可变的)数据结构,而不是关注cons单元/列表.

它也可能引起混淆.如果给出一个hashmap,一个集合或一个向量,你会如何期望这个函数的行为?还是一个代表一些复杂的可变数据结构的Java对象?

名称"atom"也用于完全不同的东西 - 它是Clojure 管理共享,同步,独立状态的核心并发机制之一.


Stu*_*rra 13

Clojure有coll?(集合?)函数,它是(有点)的反函数atom?.


Ósc*_*pez 7

The Little Schemer一书中,atom?定义如下:

(define (atom? x)
  (and (not (pair? x))
       (not (null? x))))
Run Code Online (Sandbox Code Playgroud)

注意到它null不被视为原子,正如其他答案所暗示的那样.在所提到的书中atom?使用很多,特别是在编写处理列表列表的程序时.


lep*_*pie 6

在实现R6RS的整个IronScheme标准库中,我从不需要这样的功能.

综上所述:

  • 这没用
  • 如果需要,写起来很容易

这几乎遵循Scheme的简约方法.