检查列表的所有索引是否相等

时间:2011-12-11 19:02:30

标签: scheme

我正在寻找两个长度相等的列表,并返回列表彼此不相等的所有索引的列表。

例如,如果我输入("orange" "yellow" "green" "green")("orange" "green" "yellow" "green"),我会期望返回(1 2)((假设列表索引在方案中从0开始)。)

我应该怎么做?

1 个答案:

答案 0 :(得分:1)

我会告诉您需要做什么的一般概念,并且我会让您弄清楚细节 - 我不想为您破坏作业:

(define (unequal-indexes lst1 lst2)
  (unequal-aux lst1 lst2 XXX1))

(define (unequal-aux l1 l2 idx)
  (cond ((null? l1) 
         XXX2)
        ((equal? (car l1) (car l2))
         XXX3)
        (else
         XXX4)))

首先,您必须意识到您需要一种方法来跟踪您所依赖的索引。为此,我定义了一个辅助程序unequal-aux,它从主程序unequal-indexes调用。在上面的代码中,填写以下空格:

  • XXX1 :什么是初始索引?
  • XXX2 :如果列表为空,应该返回什么?请记住,我们想要返回索引列表
  • XXX3 :如果两个列表中的当前元素相等,会发生什么?提示:递归必须在两个列表上继续,并且索引必须递增,但我们不会将元素添加到正在构建的列表中
  • XXX4 :如果两个列表中的当前元素不同,会发生什么?提示:递归必须在两个列表上继续,并且索引必须递增,这次我们将元素添加到正在构建的列表中 - 哪个元素?我们目前正在使用的索引

当然,到现在为止,您必须知道列表是由cons构建的 - 将每个元素构建到列表的其余部分,直到我们到达空(null)列表。