2011-12-11 83 views
2

我在寻找两个相等长度的列表,并返回列表不相等的所有索引列表。例如,如果我放入("orange" "yellow" "green" "green")("orange" "green" "yellow" "green"),我期望返回(1 2)((假设列表索引从0开始在方案中))。在列表中的所有索引处检查是否相等

我应该怎么办?

+0

这功课吗?到目前为止你做了什么? - 先显示一些努力!另一件事,你的例子与你写的内容相矛盾:(0 3)是列表中的元素彼此相等的索引 –

+0

这不完全是家庭作业。这个问题本身没有分配。我正在试图编写一个程序来做到这一点,以便解决一些分配给作业的东西。我不知道如何做到这一点,这就是为什么我问我该怎么做。如果你没有什么可以帮助解决这个问题,你不需要评论。 – user1023010

回答

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建立每个元素-ing到列表中的其余部分,直到我们到达空(NULL)名单。