Лучший способ проверить, если список не является нулевым? - PullRequest
7 голосов
/ 09 сентября 2011

В Common Lisp, если бы я хотел проверить, не является ли список нулевым, я мог бы просто использовать сам список в качестве условия, поскольку все ненулевые списки считаются истинными.Тем не менее, я обнаружил, что в Схеме то же самое заставит Схему думать, что я пытаюсь вызвать функцию.Есть ли лучший способ проверить, является ли список нулевым на схеме, чем определить другую функцию, которая выполняет (not (null? x))?

Ответы [ 2 ]

8 голосов
/ 09 сентября 2011

В Схеме все, что не #f, является правдивым, поэтому '() считается #t в if утверждениях.

Таким образом,

(if '() "true" "false") => "true"
(not '()) => #f

Использование (not (null? x)) это самый простой способ проверить, не является ли список ненулевым: он точно описывает, что вы хотите, и в угловых случаях, когда вам дается что-то, что не является списком, он даст вам другое поведение:

(if (not (null? #t)) "true" "false") => "true"
(if (not #t) "true" "false") => "false"
7 голосов
/ 09 сентября 2011

Если вы знаете, что это список, вы можете использовать (pair? x), так как каждый список является парой или '().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...