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

例如,如果我输入("orange" "yellow" "green" "green")("orange" "green" "yellow" "green") ,我希望得到的回报是(1 2) ((假定列表索引从方案中的0开始))。

我应该怎么做?

===============>>#1 票数: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)名单。

  ask by user1023010 translate from so

未解决问题?本站智能推荐: