В книге Маленький интриган мы находим эту функцию, которая поддерживает только списки, длина которых меньше или равна 1:
(((lambda (mk-length) ; A.
(mk-length mk-length))
(lambda (mk-length)
(lambda (l)
(cond
((null? l ) 0)
(else (add1 ((mk-length eternity ) (cdr l))))))))
'(1))
Я хочу учиться шаг за шагом и хочу написать аналогичную функцию, которая поддерживает только списки длиной меньше или равной 2.
Пожалуйста, не отвечайте на этот вопрос, предлагая код вида:
(((lambda (mk-length) ; B.
(mk-length mk-length))
(lambda (mk-length)
(lambda (l)
(cond
((null? l) 0 )
(else (add1((mk-length mk-length) (cdr l))))))))
'(a b c d))
потому что эта функция поддерживает любую длину.
И я уже знаю, как написать такую функцию:
(((lambda (mk-length) ; C.
(mk-length
(mk-length (mk-length eternity))))
(lambda (length)
(lambda (l)
(cond
((null? l) 0)
(else (add1 (length (cdr l))))))))
'(1 2)) ;;
для достижения моей цели. Но этот код более чем в одном шаге от первого фрагмента.
Может быть, мне не стоит меняться:
(lambda (mk-length) ; D.
(mk-length mk-length)
(mk-length eternity )
на(mk-length mk-length)
, можно получить любую длину. Трудно думать, поэтому я хочу реализовать только<=2
версию. на базе 1-го кода - person jiamo   schedule 04.04.2015length≤∞
, а неlength≤2
. - person Will Ness   schedule 20.01.2018