가 문제이다 값 길이) 여기서 첫 번째 요소는 값이고 두 번째 요소는 값이 인코딩 된 목록에서 발생하는 횟수입니다. 예를 들어반응식 런 렝스 부호화
: 나는 정말의 수를 계산하는 방법을 생각 질수 있기 때문에
가(define (encode lst)
(cond
((null? lst) '())
(else ((append (list (car lst) (count lst 1))
(encode (cdr lst)))))))
(define (count lst n)
(cond
((null? lst) n)
((equal? (car lst) (car(cdr lst))) (count (cdr lst) (+ n 1)))
(else (n)))))
그래서 나는이 늘 일을 알고
(encode '(1 1 2 4 4 8 8 8)) ---> ((1 2)(2 1)(4 2)(8 3))
이것은 내가 지금까지 가지고있는 코드입니다 특정 원자를 효과적으로 목록에서 반복 할 수 있습니다. 또한 이전 (값 길이) 쌍을 저장 한 후 목록의 다음 고유 원자를 계산합니다. 기본적으로, 내 주요 문제는 비록 내 (값 길이) 쌍을 만드는 목록에서 볼 수있는 원자의 양을 유지하는 방법을 생각해 내고있다.
이 코드를 올바르게 구현하고 코드를 추가 할 수있었습니다. 필요합니다. 이 모든 것이 지금 내게 훨씬 더 의미가 있습니다. – Frank
@Frank을 도와 드리겠습니다. 변수를 변경하는 것을 모방하는 인수를 추가하는 트릭은 대개 Scheme의 문제에 대한 해결책입니다. Scheme에는 함수 이름 지정을 잃지 않고 let처럼 쓸 수있는'let '이라는 이름이 있습니다. – Sylwester
@Sylwester 귀하의 의견에 설명 된 이름의'let' 양식을 사용하는 코드의 변형을 추가했습니다.^_^ – naomik