На нашем экзамене нам нужно было написать процедуру, которая отображает первые 20 элементов последовательности, и процедуру, которая принимает 2 последовательности и возвращает одну в виде процедуры. Я написал процедуры для отображения последовательности для первых 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))))
Это должно выводиться при вызове этих двух процедур
(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, ...
Нам просто нужно сопоставить четные числа обратно с соответствующим числом в последовательности целых чисел, например: 2->1, 4->2, 6->3 и так далее, проделав нечто подобное для нечетных чисел. Вот как:
(define (seq-interleave seq1 seq2)
(lambda (n)
(if (even? n)
(seq1 (/ n 2))
(seq2 (/ (+ n 1) 2)))))