다음 코드를 관리하여 다른 두 목록을 사용하여 목록의 항목을 대체 할 수있었습니다. Orilist와 newlist는 원래 용어와 새로운 용어를 순서대로 사용합니다.라켓에서 3 개 목록에 대한 기능 프로그래밍
(define (list-replace-from-lists slist orilist newlist)
(define replaced #f)
(define outl '())
(for ((item slist))
(set! replaced #f)
(for ((ori_ orilist) (i (in-naturals)) #:when (equal? item ori_))
(set! outl (cons (list-ref newlist i) outl))
(set! replaced #t))
(when (not replaced)
(set! outl (cons item outl))))
(reverse outl))
은 (목록에서 각각 12, 15 (2)와 (5)를 대체하기 : 여분이 orilist 및 orilist 항목 SLIST 존재할 경우 newlist-, SLIST가 newlist에서 새로운 아이템을 대응하도록 변화를 사용하여 수행 1 2 3 4 5 6)
'(1 12 3 4 15 6)
그러나, 상기 기능 코드 보이지 않는 많은 세트를 가지고
(list-replace-from-lists (list 1 2 3 4 5 6) (list 2 5) (list 12 15))
출력한다! 진술. 어떻게 이것을 기능 코드로 변환 할 수 있습니까? 위의 목적을 위해 구조물이나 다른 데이터 유형을 사용해야합니까?
수정 : 항목이 원본 목록에 재발행 될 수 있습니다. 예 : (list 1 2 3 4 5 2 6)
나중에 건초 더미에서 항목이 다시 발생하면 해결책이 작동하지 않습니다. ((목록 1 2 3 4 5 2 6) (목록 2 5) (목록 12 15))를 대체하십시오. 두 번째 2는 대체되지 않습니다. – rnso
@rnso 게시 한 예제에서 작동했습니다. –
간단한 예를 게시했는데 그 해결책은 정말 멋지다. 그러나 되풀이 항목은 배제되지 않습니다. – rnso