英文:
Extracting data of pairs without the data that encountered before
问题
I don't want to translate the code part. However, I can provide a translation of the non-code portion of your text:
我有一些数据,其中包含一些配对数据。但是有些配对在之前已经遇到过。我不想再次提取相同的数据。例如,我有像这样的数据。
所以,如您所见,p3的第一个元素与p1相同。但是p0的第一个元素之前已经出现过。
首先,我首先像这样定义了所有的配对:
然后,我使用递归提取了所有的配对:
但是,我不想再次提取(2 3 1)
,因为我之前已经遇到过它。我该如何检测这一点?
英文:
I have a data which inside of some pairs. But some pairs go a pair that encountered before. I don't want to extract same data again. For example I have a data like this.
So, as you see p3's first item goes p1. However p0's first item has gone that element before.
First, I have defined all pairs first like this
(define p2 (cons 2 3))
(define p4 (cons 4 5))
(define p1 (cons p2 1))
(define p3 (cons p1 p4))
(define p0 (cons p1 p3))
then I extracted all pairs by using recursion
(define (extract pair)
(if (pair? pair) (append (extract (car pair)) (extract (cdr pair))) (list pair)))
And I get the result of
(2 3 1 2 3 1 4 5)
However, I don't want to extract (2 3 1)
again because I have encountered before. How can I detect that?
答案1
得分: 0
请尝试使用(union x y)
代替(append x y)
:
(define (extract pair)
(if (pair? pair)
(union (extract (car pair)) (extract (cdr pair)))
(list pair)))
(define (union A B)
(cond [(empty? A) B]
[else
(let ([C (union (rest A) B)])
(cond [(member (first A) C) C]
[else (cons (first A) C)]))]))
(define p2 (cons 2 3))
(define p4 (cons 4 5))
(define p1 (cons p2 1))
(define p3 (cons p1 p4))
(define p0 (cons p1 p3))
(extract p0)
英文:
Try to use (union x y)
instead of (append x y)
:
(define (extract pair)
(if (pair? pair)
(union (extract (car pair)) (extract (cdr pair)))
(list pair)))
(define (union A B)
(cond [(empty? A) B]
[else
(let ([C (union (rest A) B)])
(cond [(member (first A) C) C]
[else (cons (first A) C)]))]))
(define p2 (cons 2 3))
(define p4 (cons 4 5))
(define p1 (cons p2 1))
(define p3 (cons p1 p4))
(define p0 (cons p1 p3))
(extract p0)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论