我一直在試圖創建一個子集?,成員?以及使用預定義的濾波函數和地圖函數(ormap,andmap)的一些變體的相交函數。方案 - 如果使用'map/filter'中的函數,如果它有多個參數?
「會員?」函數應該檢查一個元素是否是列表的成員:
(define member?
(lambda (e s)
(ormap (curry same-elem? e) s)))
它使用一個名爲「same-elem?」的函數。看起來像這樣:
(define same-elem?
(lambda (e1 e2)
(cond ((and (set? e1) (set? e2)) (same-set? e1 e2))
((and (number? e1) (number? e2)) (= e1 e2))
(else (equal? e1 e2)))))
「subset?」檢查是否在一組中的元素是另一組的一部分:
(define subset?
(lambda (s2 s1)
(andmap (curry member? s2) s1)))
在「相交」功能應該返回兩個集合的交集:
(define intersection
(lambda (s2 s1)
(filter (curry member? s2) s1)))
原因我使用的「咖喱'函數是因爲我試圖在此stackoverflow線程中遵循解決方案:Scheme/Racket filter/map multiple arguments試圖將第二個參數傳遞到我調用的函數中。它雖然不起作用。
每當我調用這些函數中的任何一個時,它都會輸出一個錯誤消息,說明我的成員在我的ormap調用中需要一個列表?功能,但有一個元素。奇怪的部分是我的成員?功能工作正常,直到像幾分鐘前......我甚至沒有碰過任何東西!
我是一個在編程方面的新手,我對Scheme完全陌生。如果map/filter中的被調用函數只有一個參數,我知道如何使用map/filter函數......但是如果我有多個參數,該怎麼處理呢?請幫忙。
編輯:我下面選擇的解決方案不適用於咖喱。但是,如果您刪除咖喱功能並編寫匿名函數,它確實可行。
像這樣:
(define member?
(lambda (e s)
(ormap (lambda (x)
(same-elem? e x)) s)))
過程'同組'是不確定的,你的意思是'設置'相等同 –
設置?沒有定義。我只是忘了把它添加到帖子中。 – Schytheron