2011-04-15 84 views
0

我遇到了我的方案計劃問題。我試着拿兩份名單並比較它們的大小,並且返回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

需要注意的是:

(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))))) 

會,因爲它發現了短名單的末尾,儘快停止。

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

代碼中的這一行有一個謂詞,但沒有結果。如果他們是平等的,你想返回#t。
當列表長度不相等時,還可以添加其他情況來捕獲。例如:(else #f)

查看更多about conditionals here