Почему отец Клоюре сказал, что схема / истина / ложь нарушены? - PullRequest
34 голосов
/ 29 апреля 2011

В этом видео Рич Хики представил Clojure для программистов на Лисп.

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

slide

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

Ответы [ 3 ]

43 голосов
/ 05 мая 2011

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

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

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

9 голосов
/ 29 апреля 2011

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

3 голосов
/ 29 апреля 2011

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

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

...