Jef*_*att 5 scheme elisp clojure common-lisp racket
我已经在Scheme,Racket和Clojure中注意到表达式(在这里使用Clojure)(and true '())评估()并(and '() true)评估为true.这不仅适用于空列表,也适用于任何列表.
但是在GNU CLISP和Emacs Lisp中,也(and t '())评估nil和(and '() t)评估nil,但(and t '(1 2 3))评估(1 2 3)和(and '(1 2 3) t)评估t.
这里发生了什么?
在第一组语言中,空列表不被视为'falsey',而是被视为'truthy'值.在scheme和racket中,#false是唯一的假值,即使'()为null,null也不是false; 在clojure中,空列表与nil不同,所以它也是'truthy'.
在第二组中,空列表是同义词,nil并被视为false,从而导致条件返回nil.然而,具有元素的列表与nil不同,因此再次被视为truthy值.
拼图的最后一部分是,and如果传递的所有值都是真实的,则返回最后的真值.
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |