Когда Вы вводите “привет, мир” в Clojure REPL, почему он говорит 'ноль'?

Можно также попробовать /etc/redhat-release или /etc/fedora-release:

cat /etc/fedora-release 
Fedora release 7 (Moonshine)
11
задан uzo 12 September 2009 в 21:02
поделиться

4 ответа

Каждая функция или вызов макроса возвращает значение в Clojure, даже такие вещи, как операторы if , конструкции цикла, определения функций верхнего уровня или операторы печати, которые на других языках являются операторами ". В Лиспе нет дихотомии оператор / выражение; все является выражением.

Итак, println и его друзья выводят на стандартный вывод в качестве побочного эффекта и возвращают nil , как и большинство функций, для которых нет ничего полезного. return.

Но ввод буквальной строки в REPL должен возвращать саму строку, как в сообщении digitalross .

user> (println "hello world")
hello world
nil
user> "hello world"
"hello world"
user>

В первом случае строка hello world будет то, что было напечатано в стандартном выводе с помощью println . nil - это возвращаемое значение println . Во втором случае "hello world" - это возвращаемое значение "hello world" , поскольку строка оценивается сама по себе. В этом случае ничего не выводится на стандартный вывод.

(SLIME и некоторые другие интерфейсы REPL будут полезно окрашивать стандартный вывод (строка hello world выше) иначе, чем возвращаемое значение того, что вы ввели в REPL ( nil выше), иначе это может сбить с толку.)

Это то, что вы должны увидеть на REPL. То, что вы разместили, должно быть артефактом Enclojure.

В этом случае ничего не выводится на стандартный вывод.

(SLIME и некоторые другие интерфейсы REPL будут полезно окрашивать стандартный вывод (строка hello world выше) иначе, чем возвращаемое значение того, что вы набрали в REPL ( nil выше), иначе это может сбить с толку.)

Это то, что вы должны увидеть на REPL. То, что вы разместили, должно быть артефактом Enclojure.

В этом случае ничего не выводится на стандартный вывод.

(SLIME и некоторые другие интерфейсы REPL будут полезно окрашивать стандартный вывод (строка hello world выше) иначе, чем возвращаемое значение того, что вы набрали в REPL ( nil выше), иначе это может сбить с толку.)

Это то, что вы должны увидеть на REPL. То, что вы опубликовали, должно быть артефактом Enclojure.

21
ответ дан 3 December 2019 в 03:18
поделиться

Невозможно воспроизвести ...

В Clojure 1.0 этого не происходит. 0-

$ java -cp clo*.jar clojure.lang.Repl
Clojure 1.0.0-
user=> "hello, world"
"hello, world"
user=> 
4
ответ дан 3 December 2019 в 03:18
поделиться

Я думаю, это возвращаемое значение вашего выражения. Так обстоит дело с рубином с методом put.

0
ответ дан 3 December 2019 в 03:18
поделиться

В последнее время есть несколько ошибок, связанных с интерпретацией последовательности конца строки CRLF как двух разных выражений под окнами. Возвращаемое значение строки в clojure должно быть самой строкой.

3
ответ дан 3 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: