2014-04-01 3 views
0

저는 언어를 어지럽히고 도움이 필요합니다. 첫 번째와 두 번째를 서로 바꿔주는 스왑 함수를 만들고 싶습니다. 따라서 (교환 (a b c d e g)) (b a d c e g)을 반환해야하는 경우. 나는 그것을하는 어떤 가치든지 저장하고 싶지 않다. 체계 안에 그것을하는 기능 또는 방법 있는가? 나는 (D 'E)'C 'DEFINE 목록 1 (LIST'는 'b)는 다음프로그래밍에서 요소를 교환하고 싶습니다

하지 않도록이 간계가있다

+0

http://stackoverflow.com/questions/13564575/swap-two-elements-in-list-in-scheme –

+0

내가 원하는 것을하지 이잖아. –

+0

그건 도움이되지 않습니다. –

답변

4

무엇을 할

같은 목록을 정의한다면 나는 아무 생각이 없다 한 번에 두 개의 요소를 처리하고 그들을 교체하고 재귀에서 두 개의 요소를 전진시킵니다.

(define (swap lst) 
     ; if the list is empty or has a single element 
    (cond ((or (null? lst) (null? (cdr lst))) 
     ; then return that list 
     lst) 
     ; otherwise build a new list 
     (else 
     ; by first adding the second element 
     (cons (cadr lst) 
     ; and then adding the first element 
       (cons (car lst) 
     ; finally, advance the recursion over two elements 
        (swap (cddr lst))))))) 

내가 문제의 샘플 출력이 잘못 믿는다 f에서 온 않는 경우 : 이것은 무슨 뜻입니까? 예를 들어 내가 기대했던 결과는 다음과 같습니다

(swap '(a b c d e g)) 
=> '(b a d c g e) 

(swap '(a b c d e)) 
=> '(b a d c e) 

(swap '(a)) 
=> '(a) 

(swap '()) 
=> '() 
+0

오, 죄송합니다. 의견을 주셔서 감사합니다. 많이 도와 줬어. 나는 타이핑으로 코드를 가진 사람들을 결코 이해하지 못한다. 그러나 당신은 훌륭한 일을했다. –

+0

나는 할 것이다. 실제로 또 다른 질문입니다. cond가 null 인 경우는? (cdr lst)))는 목록에서 첫 번째 요소를 꺼내 다음 2를 넣는 것을 의미합니까? 그리고 cadr은 실제로 무엇을합니다. 또한 [email protected]에서 이메일을 보낼 수 있다면 괜찮을까요? –

+0

목록에 홀수 개의 요소가있는 경우'(null? (cdr lst)) '를 물어야합니다. 그 경우 마지막 (단일) 요소를 바꿀 수 없기 때문입니다. '(cadr x)'는'(car (cdr x))'의 줄임말이고,'(cdr x)'는'(cdr (cdr x))'의 줄임말입니다. 미안하지만 이메일로 질문에 답하지 않습니다. –

관련 문제