我的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声明。
答案 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。