在Scheme中使用迭代器的交集集

时间:2015-11-27 23:31:02

标签: object functional-programming iterator scheme

我正在尝试创建一个带有两个set对象的函数,并返回一个新的set对象,它是使用迭代器时这两个对象的交集。

以下是我使用的一些函数,basic-set1basic-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

我有点难过。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

据我所知,你的代码是正确的。第一个cond子句返回result,这是一个过程。如果您希望将列表作为列表返回,请尝试((not ((my-iterator3 'hasnext))) ((result 'get-set)))作为iter

中的第一个cond子句