在 Scheme 中使用迭代器的交集
Intersection-sets using iterator in Scheme
我正在尝试创建一个函数,它接受两个集合对象和 returns 一个新的集合对象,它是使用迭代器时这两个对象的交集。
以下是我使用的一些函数,basic-set1
和basic-set2
是初始为空的集合对象。
((basic-set1 'get-set))
>(d c b a)
((basic-set2 'get-set))
>(a b)
(define my-iterator3 basic-set1)
((my-iterator3 'next))
> d
((my-iterator3 'next))
> c
((my-iterator3 'hasnext))
> #t
我想要的输出
(intersection-sets basic-set1 basic-set2)
> (b a)
这是我目前的代码。
(define (intersect-sets set1 set2)
(define my-iterator3 ((set1 'get-iterator )))
(define result (basic-set))
(define (iter)
(let ((x ((my-iterator3 'next))))
(cond ((not ((my-iterator3 'hasnext))) result)
(((set2 'element?) x)
(begin ((result 'insert) x)
(iter)))
(else
(iter)))))
(iter))
测试输出:
(intersect-sets basic-set1 basic-set2)
>#<procedure:...Problem3.rkt:60:2
我有点难过。任何帮助,将不胜感激。
据我所知,您的代码是正确的。第一个cond
子句returnsresult
,这是一个程序。如果您希望集合作为列表返回,请尝试 ((not ((my-iterator3 'hasnext))) ((result 'get-set)))
作为 iter
中的第一个 cond 子句
我正在尝试创建一个函数,它接受两个集合对象和 returns 一个新的集合对象,它是使用迭代器时这两个对象的交集。
以下是我使用的一些函数,basic-set1
和basic-set2
是初始为空的集合对象。
((basic-set1 'get-set))
>(d c b a)
((basic-set2 'get-set))
>(a b)
(define my-iterator3 basic-set1)
((my-iterator3 'next))
> d
((my-iterator3 'next))
> c
((my-iterator3 'hasnext))
> #t
我想要的输出
(intersection-sets basic-set1 basic-set2)
> (b a)
这是我目前的代码。
(define (intersect-sets set1 set2)
(define my-iterator3 ((set1 'get-iterator )))
(define result (basic-set))
(define (iter)
(let ((x ((my-iterator3 'next))))
(cond ((not ((my-iterator3 'hasnext))) result)
(((set2 'element?) x)
(begin ((result 'insert) x)
(iter)))
(else
(iter)))))
(iter))
测试输出:
(intersect-sets basic-set1 basic-set2)
>#<procedure:...Problem3.rkt:60:2
我有点难过。任何帮助,将不胜感激。
据我所知,您的代码是正确的。第一个cond
子句returnsresult
,这是一个程序。如果您希望集合作为列表返回,请尝试 ((not ((my-iterator3 'hasnext))) ((result 'get-set)))
作为 iter