在编程语言中使用atom数据类型的功能有多有用?
一些编程语言使用原子或符号的概念来表示某种常量.我遇到的语言(Lisp、Ruby和Erlang)之间有一些差异,但在我看来,一般的概念是相同的.我对编程语言设计感兴趣,我想知道atom类型在现实生活中有什么价值.其他语言,如Python、Java、C#似乎在没有它的情况下表现得相当不错.
我没有Lisp或Ruby的实际经验(我知道语法,但在实际项目中都没有使用过).我已经用了足够多的Erlang来适应那里的概念.
在编程语言中使用atom数据类型的功能有多有用?
一些编程语言使用原子或符号的概念来表示某种常量.我遇到的语言(Lisp、Ruby和Erlang)之间有一些差异,但在我看来,一般的概念是相同的.我对编程语言设计感兴趣,我想知道atom类型在现实生活中有什么价值.其他语言,如Python、Java、C#似乎在没有它的情况下表现得相当不错.
我没有Lisp或Ruby的实际经验(我知道语法,但在实际项目中都没有使用过).我已经用了足够多的Erlang来适应那里的概念.
下面是一个简短的例子,展示了操纵符号的能力如何让代码更干净:(代码在Scheme中,是Lisp的一种方言).
(define men '(socrates plato aristotle))
(define (man? x)
(contains? men x))
(define (mortal? x)
(man? x))
;; test
> (mortal? 'socrates)
=> #t
可以使用字符串或整数常量编写此程序.但象征性的版本有一定的优势.符号在系统中保证是唯一的.这使得比较两个符号的速度与比较两个指针的速度一样快.这显然比比较两个字符串要快.使用整数常量可以让人们编写无意义的代码,比如:
(define SOCRATES 1)
;; ...
(mortal? SOCRATES)
(mortal? -1) ;; ??
也许这个问题的详细答案可以在Common Lisp: A Gentle Introduction to Symbolic Computation本书中找到.