【发布时间】:2014-02-06 06:28:00
【问题描述】:
我正在学习 Scheme 课程的介绍,并且已经在特定问题上停留了几个小时。要求是编写一个函数,该函数接受两个原子列表,lat1 和 lat2,并返回 lat1 中的原子在 lat2 中出现的总次数。
例如 (发生'(d e f)'(a x b e d g h f e)) 将返回 4
到目前为止我的代码是
(define occurN
(lambda (lat1 lat2)
(cond
((null? lat1) 0)
((null? lat2) 0)
(else
(cond
((eq? (car lat1) (car lat2)) (add1 (occurN lat1 (cdr lat2))))
(else (occurN lat1 (cdr lat2))))))))
这显然适用于遍历 lat1 的第一个元素,检查 lat2 的每个元素是否都等于它,如果它们相等,则将 1 添加到计数中,否则转到下一个元素。我遇到的问题是让代码从 lat1 的下一个值和 lat1 的所有后续值开始,同时保留计数并遍历 lat2 的列表并检查与第一个以外的 lat1 的其他值的等价性,进一步如果它们是,则添加到计数中。 如果有人对我如何解决这个问题有任何提示,将不胜感激。
【问题讨论】:
-
提示:首先编写一个函数来计算原子列表中一个原子的出现次数。然后在解决您的问题的函数中使用该函数。