方案:比较列表大小

时间:2011-04-15 00:27:38

标签: list struct scheme equals

我的Scheme计划存在问题。我试图接受2个列表并比较它们的大小,返回true是大小相等,如果不是则返回false。每个原子的值无关紧要。

示例:

(structeq '(a (b(c))) '(1(2(3)))) => #t
(structeq '(x) '(()) => #f

这是我的代码:

(define (structeq list1 list2)
    (cond ((null? list1) list2)
    (eq? (length list1) (length list2))))

(structeq '(a b c d) '(a b c))

但是,这会返回最后一个列表的大小。我哪里错了?

编辑:取消此问题。我想通了,我只需要删除cond声明。

2 个答案:

答案 0 :(得分:2)

请注意:

(define (same-length a b)
  (if (and (null? a) (null? b)) #t
      (if (or (null? a) (null? b)) #f
          (same-length (cdr a) (cdr b)))))

一旦找到较短列表的结尾就会停止。

答案 1 :(得分:0)

(eq? (length list1) (length list2)))) 

代码中的这一行有一个谓词但没有结果。如果它们相等,你想要返回#t。
当列表的长度不相等时,也可以添加一个else案例来捕获。例如:(否则#f)

详细了解条件here