为什么Clojure的父亲说Scheme的真/假被打破了?

yeh*_*nan 34 null scheme clojure common-lisp

在这段视频中,Rich Hickey为Lisp程序员介绍了Clojure.

在时间01:10:42,他在Clojure/Common Lisp/Scheme/Java中讨论了nil/false/end-of-sequence /'().他说:"计划是真实的,但它们是破碎的."

滑动

我不明白他为什么这么说,为什么他认为它"破碎"了?

Art*_*ski 43

它让我感到震惊,你宁愿从马的嘴里看到它,所以这里有一条消息的摘要Rich发布:

Scheme #t几乎完全没有意义,因为Scheme条件测试#f/non #f,而不是#f/#t.我认为值#f没有任何实用性,并且基于条件就意味着写了很多(if(not(null?x))... where(如果x ...将在Clojure/CL中执行) ,在处理序列,过滤器等时,表现力显着下降.

该消息中的链接也是值得的,尽管第二个可能有点诗意.

  • 老实说,我的脑子里仍然有问号。所以只给你一半的分数。劳驾。 (2认同)
  • 所以如果我理解正确的话,Rich 真的是在抱怨,在Scheme 中,nil 在条件语句中评估为 true(而不是 false)?对我来说,这确实是一个糟糕的设计。 (2认同)
  • @Nathan - 事实上,它的计算结果为#t。从技术上讲,'() 的计算结果为#t,因为除非您定义它,否则Scheme 缺少 nil。 (2认同)

Mic*_*ohl 9

从您发布的图表中我假设它是因为Scheme不同于图表中的所有其他语言使用的不是nilfalseend-of-seq.由于'()non-#f这将是在条件一truthy值,但是作为用于序列检查端falsy值.

  • 我猜有些人会认为它是破碎的,如果同样的事情可能是真相或虚假取决于背景. (6认同)
  • 啊,没有任何解释的downvotes,得爱他们. (4认同)