2014-06-10 4 views
0

(list 'red 'blue 'green 'yellow)(list 'black 'red 'orange 'green)이라고 가정하면 두 개의 동일한 요소가 있으므로 2를 생성해야합니다. 나는 다음과 같이 똑같은 장소에서 같은 요소를 찾는 법을 안다.두 개의 목록에서 같은 요소를 라켓으로 찾으십시오.

(define (helper l1 l2) 
    (cond 
    [(equal? l1) empty] 
    [(equal? l2) empty] 
    [(equal? (first l1) (first l2)) true] 
    [else (rest l1) (rest l2)])) 

도움주세요. :)

답변

3

숙제로하지 않을 경우, 라켓의 set library을 사용하는 Óscar López의 코드를 참조하십시오.

#lang racket 

(require racket/set) 

(define number-same (compose1 length set-intersect)) 

(number-same '(red blue green yellow) 
      '(black red orange green)) 
+0

이 답변이 잘못 두 목록에서 같은 요소를 찾기 위해이 내 코드, 테스트는 : 오류가 발생합니다. 실수를 수정하는 올바른 구현에 대한 내 대답을 참조하십시오. –

+0

@ ÓscarLópez 여기에서 잘 작동합니다. 가장 최근의 라켓 버전을 사용하고 있습니까? 목록 [집합입니다] (http://docs.racket-lang.org/reference/sets.html) BTW. – kayleefrye

+0

흠, 실제로 이것은 버전 관련 문제인 것 같습니다. v5.3.6을 사용하고있었습니다. 이전 릴리스의 Racket에서는 입력리스트를'set-intersect'를 호출하기 전에 명시 적으로 세트로 변환해야했습니다. 아 글쎄, 적어도 내 솔루션은 하위 호환성이 있다고 말할 수 있습니다 : P –

-1

라켓

(define (cek x y) 
(cond 
[(null? y) 0] 
[(eq? x (car y)) (+ 1 (cek x (cdr y)))] 
[else (cek x (cdr y))] 
) 
) 
(define (sifat x y) 
(cond 
[(null? x) 0] 
[else (+ (cek (car x) y) (sifat (cdr x) y))] 
) 
)