определить функцию mylength в ракетке - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь выяснить, как определить функцию длины в ракетке.Вот мой код:

(define mylength
  (lambda (lst)
    (cond
     ((null? lst) 0)
     (else (+ 1 (mylength (cdr lst))))
     )))

Если я попытаюсь (mylength '(1 2 3)), результат будет 3. Когда я попробую (mylength '(1 (2 3) 4)), результат все еще будет 3. Но результат должен быть 4. Как мне это сделать?в ракетке

1 Ответ

0 голосов
/ 26 февраля 2019

Если вы хотите посчитать вложенные элементы отдельно, вам также нужно вернуться к (car lst).

(define mylength
  (lambda (lst)
    (cond
     ((null? lst) 0)
     ((atom? lst) 1)
     (else (+ (mylength (car lst))
              (mylength (cdr lst))))
     )))

Обратите внимание, что это означает, что вложенный пустой список не увеличивает длину.

(mylength '(1 () 3))

будет 2, а не 3.

...