목록에서 마지막 요소를 찾아야하는 함수를 작성하기 시작했습니다. 내 생각은 search
을 사용하여 지정된 기호의 발생 횟수를 계산하여 반환하는 것이 었습니다. 그런 다음 요소를 제거하는 removeLast
에 카운트를 전달합니다. 그런 다음 기본 케이스를 용이하게하기 위해 카운트를 removeLast
으로 감소시킵니다. 내가 보았던 것에서는 set!
을 사용하는 것이 좋지 않습니다. 기호의 마지막 발생을 "기억"하는 더 좋고/더 우아한 방법이 있습니까? ((set! count (sub1 count))(cons (car lis)(removeLast symbol (cdr lis) count))))
같이 코드를 실행목록에서 지정된 요소의 마지막 항목 찾기 및 제거 [racket]
(define (lastLess lis symbol)
(define count 0)
(set! count (search symbol lis count))
(removeLast symbol lis count)
)
(define (search symbol lis count)
(cond ((null? lis) count)
((eq? symbol (car lis)) (+ count (add1 (search symbol (cdr lis) count))))
((pair? (car lis))(+ count(+ 0 (search symbol (car lis) count))))
(else (+ count(+ 0 (search symbol (cdr lis) count))))
)
)
(define (removeLast symbol lis count)
(cond ((null? lis) '())
((eq? count 0) (cdr lis))
((eq? symbol (car lis)) ((set! count (sub1 count))
(cons (car lis)(removeLast symbol (cdr lis) count))
)
)
((pair? (car lis)) (removeLast symbol (car lis) count))
(else (cons (car lis) (removeLast symbol (cdr lis) count)))
)
)
오류가 발생합니다 :
application: not a procedure; expected a procedure that can be applied to arguments given: # arguments...: '(e)
편집 : 이것은 reverse
의이 허용되지 않도록 중복 클래스에 대한 할당하고, 나는 둥지 목록 고려해야합니다 .
나는 당신이 말하는 것을보고 있습니다. 이것은 도움이된다. 고마워. – BrianM