(define (walk-print ls)
(if (null? ls)
'() ;; This can be anything
;; I just picked '() as that was the simplest "nothing" value I could think of.
(if (pair? (car ls))
(begin
(walk-print (car ls))
(walk-print (cdr ls)))
(begin
(display (car ls))
(walk-print (cdr ls))))))
Я думаю, что это самый простой способ сделать это.
Это рекурсивная функция с базовым регистром пустого списка.
Тогда, если глава списка - это еще один список, он будет первым в этом списке. Затем он переместит остальную часть списка.
В противном случае он распечатает головку списка и проследует остальную часть списка.
Начальные утверждения необходимы, поскольку мы хотим сделать два действия один за другим, но не заботимся об их возвращаемом значении.
Редактировать: Я только что узнал этот список? просматривает весь список, чтобы увидеть, является ли он правильным списком, в отличие от пары ?. Я переключил свой список? к паре ?.
Вопрос запрашивает код схемы ... – erjiang 2010-12-05 01:41:30