Я не уверен в других способах сделать это, но здесь - как Вы делаете это в Прототип (учебное руководство JSON) .
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
Вызов evalJSON () с истинным, поскольку аргумент санирует входящую строку.
Если вы хотите проверить, пуста ли «остальная часть» коллекции, используйте next
.
user> (next '(foo bar))
(bar)
user> (next '())
nil
user> (doc next)
-------------------------
clojure.core/next
([coll])
Returns a seq of the items after the first. Calls seq on its
argument. If there are no more items, returns nil.
«nil-punning» (обработка пустой коллекции / seq и nil
] как то же самое) был удален в прошлом году в пользу полностью ленивых последовательностей. См. здесь для обсуждения, ведущего к этому изменению.
first
и rest
- это функции, которые применяются к логической структуре ( seq
), а не к связанной структуре cons списка. (как и в других шепелявых).
Clojure определяет множество алгоритмов в терминах последовательностей (seqs). Seq - это логический список, и в отличие от большинства Лиспов, где список представлен конкретной двухслотовой структурой, Clojure использует интерфейс ISeq, чтобы позволить многим структурам данных предоставлять доступ к своим элементам в виде последовательностей.
Поведение является результатом определения функции и не определяется примитивной структурой данных.
Также изучает Clojure.
Для пустых последовательностей , rest
возвращает последовательность, для которой seq
возвращает nil
.
Вот почему у вас такое поведение.
Я предполагаю, что это сделано для упрощения рекурсии последовательностей, пока они не станут пустыми, и, возможно, по другим причинам smartypants ...
Технически да , но бесполезно.
«Имеет ли последовательность, созданная вызовом (seq '()) бесконечное количество нулей?»
ответ - да, потому что (остальная часть) пустой последовательности остается пустой последовательностью , которая сама может иметь (отдых)
Этот вывод, кстати, вводит в заблуждение:
1:7 user=> (rest '()) ()
первый ' () здесь пустой список .
secong () в этом примере - это пустая последовательность .
последовательности печатаются так же, как списки в ответе, даже если они не совпадают.