Как написать процедуру, которая чередует две последовательности в одну на схеме - PullRequest
0 голосов
/ 07 апреля 2019

На нашем экзамене мы должны были написать процедуру, которая отображает первые 20 элементов последовательности, и процедуру, которая принимает 2 последовательности и возвращает одну в форме процедуры.Я написал процедуру для display-sequence для первых 20 элементов, но я не могу понять, как сделать вторую процедуру, которая чередует две последовательности в одну.Буду признателен за любые идеи, как это можно сделать.

(define (display-sequence seq)
      (letrec ((iter (lambda (seq i j)
                       (if (= i j)
                           (display "...")
                           (begin (display (seq i))
                                  (display ", ")
                                  (iter seq (+ 1 i) j))))))
        (iter seq 0 20)))

(define (seq-interleave seq1 seq2)
  (lambda (n)
    (if (even? n)
        (seq1 n)
        (seq2 n))))

Это должно быть выведено при вызове этих 2 процедур

(display-sequence (seq-interleave sqr (lambda (n) 5)))  
0, 5, 1, 5, 4, 5, 9, 5, 16, 5, 25, 5, 36, 5, 49, 5, 64, 5, 81, 5, ... 

1 Ответ

2 голосов
/ 07 апреля 2019

Нам просто нужно сопоставить четные числа с соответствующим числом в последовательности целых чисел, например: 2-> 1, 4-> 2, 6-> 3 и т. Д., Выполняя что-то похожее для нечетных чисел,Вот как:

(define (seq-interleave seq1 seq2)
  (lambda (n)
    (if (even? n)
        (seq1 (/ n 2))
        (seq2 (/ (+ n 1) 2)))))
...