2012-11-06 5 views
-3

목록 ((1 4 5) 5 (6 2 5))과 다른 목록 (5 1 3 7 5 (9 2 4))이있는 경우 첫 번째 항목 목록에있는 경우 두 번째에 있는지 확인합니다. 예를 들어, (1 4 5)는 (5 1 3 7 5 (9 2 3))에 0 번 나타납니다. 5가이 목록에 2 번 나타나고 (9 2 4)가 0 번 나타납니다. 그래서리스트는 (0 2 0)을 반환 할 것입니다.목록의 항목 비교? scheme

두 개의리스트를 취하는 도식 절차 빈도를 작성하는 데 도움이 필요합니다. 첫 번째는 각 구성 요소를 비교하는 것이고 두 번째는 수를 계산하는 것입니다. 첫 번째 목록의 항목. 프로 시저에서는 어커런스 목록을 반환해야합니다.

지금까지 나는 각 항목의 발생 횟수 (카운터)를 계산하고 나머지는 목록 (빈도)에서 추적하는 두 가지 절차를 수행하라고했습니다. 지금까지 이런 짓을했습니다

(define (counter ele lst)

`(cond ((null? lst) `       
     '()) 
     `((equal? ele lst)`     
      `(+ 1 (counter ele (cdr lst))))`  
     `(else` 
     `(counter ele (cdr lst)))))`   

(define (frequency els lst)

`(if (null? els)` 
     `'()` 
     `(cons <???>` 
     `(frequency <???> lst))))` 

내가 주파수 절차를 어떻게하고, 어떻게에서 카운터 프로 시저를 호출 확실하지 않다

감사합니다.

+0

[목록의 항목 비교?] (http://stackoverflow.com/questions/13233232/comparing-items-in-a-list) –

+1

나는 이것을 믿을 수 없다. 마지막으로이 질문을 올렸을 때 나는 그것을 해결하는 데 필요한 모든 힌트를 주었고 가장 작은 노력을하지 않았습니다! 당신은 방금 _my 자신의 answer_ 공백을 채우기 위해 누군가 다른 사람에게 희망을 게시했습니다! –

+0

당신은 이미 공란에 무엇을 기입해야하는지 영어로 설명했습니다. 당신의 다음 일은 당신의 속임수에 의해이 일을 더 쉽게 할 수 없습니다. – molbdnilo

답변

1

이렇게하려면 쌍과 같은 것을 사용해야 할 것입니까? 목록의 목록 인 나무로 작업하기 때문입니다.

예를 들어 (list (list 1 2) 3 4)의 자동차는 목록 1이 될 것입니다. 2. 따라서 값을 비교하려고하면 오류가 발생합니다. 비교할 수 있도록 쌍에서 잎 (개별 숫자)을 분리해야합니다.