Печать элементов списка с нечетными индексами в схеме - PullRequest
0 голосов
/ 20 марта 2011

так что этот код называется ret-odds

 ex: (define (ret-odds lst)
      (if (null? lst) null
         (if (null? (cdr lst)) null
          (cons (car lst) (ret-odds (cdr (cdr lst)))))))

Я знаю, что проблема с последней строкой в ​​том, что она пропускает второй элемент списка и дает только 3-й .....

ex: (ret-odds (list 'a 'g 'e )) процедура вместо этого пропускает g и e и дает мне нулевое значение, так что в итоге я получаю только один, поэтому мне было интересно, как бы это исправить?

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

Ваш код всегда пропускает последний элемент в списке:

  1. При первом вызове с (list 'a 'd 'e) lst не равен нулю, а (cdr lst) не равен нулю, поэтому он берет автомобиль ('a) и выполняет рекурсивный вызов с помощью cddr (который равен * 1006). *)
  2. При втором вызове с (list 'e) lst не равен NULL, но (cdr lst) равен NULL. Таким образом, он возвращает ноль, полностью пропуская 'e.

Примерно так должно работать:

 ex: (define (ret-odds lst)
      (if (null? lst) null
         (cons (car lst)
          (if (null? (cdr lst)) null (ret-odds (cdr (cdr lst)))))))
0 голосов
/ 20 марта 2011

Измените null вашего второго if на lst.

(define (ret-odds lst)
  (cond ((null? lst) lst)
        ((null? (cdr lst)) lst)
        (else (cons (car lst) (ret-odds (cddr lst))))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...