2013-11-10 3 views
0

У меня возникли проблемы с пониманием того, как Scheme формирует, а затем обнаруживает списки. Хаус определяет разницу между списком и пунктирной парой?Нужна помощь в понимании списков на схеме

+1

[ Этот ответ] (http://stackoverflow.com/a/16379759/1281433) в [Рекурсивный диапазон в Lisp добавляет период?] (Http://stackoverflow.com/q/16379657/1281433) включает объяснение того, как пары используются для реализации списков в Scheme (и других Lisp). Однако не совсем понятно, что вы здесь задаете. Список - это либо пустой список '()', либо пара, чей 'car' является первым элементом списка и чья' cdr' является остальной частью списка (другой список). –

+0

как насчет вашего [предыдущего вопроса] (http://stackoverflow.com/questions/19886294/issues-with-conditionals-in-scheme)? Вы закончили с этим? Если это так, вы можете принять один из ответов, чтобы сообщить об этом другим участникам этого сайта. :) –

ответ

2

Структура списка образована из пар. Надлежащий список представляет собой цепочку из пар, где последняя пара имеет пустой список в качестве своего cdr .. Мы можем сделать list? так:

(define (list? lst) 
    (cond ((null? lst) #t) 
     ((pair? lst) (list? (cdr lst))) 
     (else #f))) 

Или вы могли бы использовать и/или:

(define (list? lst) 
    (or (null? lst) 
     (and (pair? lst) 
      (list? (cdr lst))))) 
+0

Первый кажется мне более ясным. – chwarr

+2

Не следует. Возвращение 'cond'' # t' или '# f' указывает на то, что логические соединители в порядке. – GoZoner

Смежные вопросы