Подтвердить что ты не робот

Почему отец Clojure сказал, что Scheme true/false нарушены?

В этом видео Rich Hickey представил Clojure для программистов Lisp.

На момент 01:10:42 он говорил о nil/false/end-of-sequence/'() среди Clojure/Common Lisp/Scheme/Java. Он сказал: "Схема имеет истину и ложь, но они сломаны".

slide

Я не понимаю, почему он это сказал и почему он считает это "сломанным"?

4b9b3361

Ответ 1

Мне кажется, что вы скорее увидели бы это из уст лошади, поэтому здесь выберем выдержку из сообщение Rich опубликовано:

Схема #t почти полностью не имеет смысла, поскольку условные обозначения схемы тест для # f/non # f, а не # f/# t. Я не думаю, что значение #f имеет много полезности и основываясь на это означает много писать (если (не (null? x))... где (если x... будет делать в Clojure/CL, и существенное уменьшение выразительной силы, когда работа с последовательностями, фильтрами и т.д.

Ссылки в этом сообщении также полезны, хотя второй может быть немного поэтическим.

Ответ 2

Из опубликованной диаграммы я предполагаю, что в схеме, отличной от всех других языков диаграммы, используется нечто иное, чем nil или false для end-of-seq. Поскольку '() is non-#f, это будет правное значение в условном выражении, но действует как значение фальши для завершения проверки последовательности.

Ответ 3

В схеме любое значение (кроме #f, которое является False) может использоваться как True в условном тесте. Подробнее здесь.

Обновление Забудьте об этом ответе, так как он одинаковый для Clojure, конечно. Мне не нравится эта неявная правда для всех значений, которые не являются ложными, например in (println (если 1 "true" "false" )). Лично я считаю, что сломанный, но Rich, вероятно, думает о чем-то еще.