在我们的考试中,我们必须编写一个显示序列前 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)))))