2017-02-20 34 views
1

我正在編寫一個方案程序,它需要兩個列表並顯示列表的聯合。這是我的代碼。Scheme union兩個列表

(define (union a b) 
    (cond ((null? b) a) 
     ((element? (car b) a) 
     (union a (cdr b))) 
     (else (union (cons (car b) a) (cdr b))))) 

當我去使用(union '(1 2 3) '(2 4 2))調用的方法,我得到讀取

Exception: variable element? is not bound. 

錯誤我在做什麼錯了,當我調用該方法?謝謝。

+1

''元素沒有任何計劃通知原語。有'member'('equal?'),'memv'('eqv?')和'memq'('eq?')。對於數字,「memv」是最有效的,而「member」可以處理更多的數據類型,並使其更通用。 – Sylwester

回答

1

它只是意味着該定義「元素?」未找到。與「會員」(球拍內置功能)替換它使得它的工作:

(define (union a b) 
    (cond ((null? b) a) 
     ((member (car b) a) 
     (union a (cdr b))) 
     (else (union (cons (car b) a) (cdr b))))) 

(union '(1 2 3) '(2 4 2)) 

輸出:

'(4 1 2 3) 
+0

Thnak你。它現在有效。 – hotshot146