The Little Schemer evens-only*&co

Мне трудно понять, что происходит с примером Маленького Интригана evens-only*&coна странице 145.

Вот пример код:

(define evens-only*&co
 (lambda (l col)
   (cond
    ((null? l)
     (col '() 1 0))
    ((atom? (car l))
     (cond
      ((even? (car l))
       (evens-only*&co (cdr l)
                    (lambda (newl product sum)
                      (col (cons (car l) newl)
                           (opx (car l) product)
                           sum))))
      (else
       (evens-only*&co (cdr l)
                    (lambda (newl product sum)
                      (col newl product (op+ (car l) sum)))))))
    (else
     (evens-only*&co (car l)
                  (lambda (newl product sum)
                    (evens-only*&co (cdr l)
                                    (lambda (dnewl dproduct dsum)
                                      (col (cons newl dnewl)
                                           (opx product dproduct)
                                           (op+ sum dsum))))))))))

Начальный colможет быть:

(define evens-results
 (lambda (newl product sum)
   (cons sum (cons product newl))))

То, что я не получаю, с lкак '((1) 2 3), он сразу переходит в финал elseс (car l)как (1)и (cdr l)как (2 3), Хорошо, но мой разум теряется, пытаясь отделить dnewl, dproduct, dsumот newl , product, sumТакже было бы полезно, если бы кто-нибудь научил меня, как настроить DrRacket, Chez Scheme или MIT-Scheme для запуска степпера

. ] Но, может быть, я не в себе слишком рано. Должен ли любой новичок, читающий это впервые, понять это дикое продолжение?

13
задан Will Ness 20 January 2018 в 15:36
поделиться