Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why did father of Clojure say that Scheme's true/false are broken?

In this video, Rich Hickey introduced Clojure for Lisp programmers.

At time 01:10:42, he talked about nil/false/end-of-sequence/'() among Clojure/Common Lisp/Scheme/Java. He said: "Scheme has true and false, but they are broken."

slide

I don't understand why he said that and why does he consider it's "broken"?

like image 560
yehnan Avatar asked Apr 29 '11 09:04

yehnan


2 Answers

It strikes me you'd rather see it from the horse's mouth, so here's a choice extract from a message Rich posted:

Scheme #t is almost completely meaningless, as Scheme conditionals test for #f/non-#f, not #f/#t. I don't think the value #f has much utility whatsoever, and basing conditionals on it means writing a lot of (if (not (null? x))... where (if x... will do in Clojure/CL, and a substantial reduction in expressive power when dealing with sequences, filters etc.

The links in that message are also worthwhile, though the second one may be a bit poetic.

like image 117
Arthur Shipkowski Avatar answered Oct 25 '22 05:10

Arthur Shipkowski


From the chart you posted I'd assume it's because Scheme unlike all the other languages in the chart uses something other than nil or false for end-of-seq. Since '() is non-#f it would be a truthy value in a conditional, but acts as a falsy value for end of sequence checks.

like image 44
Michael Kohl Avatar answered Oct 25 '22 06:10

Michael Kohl