저는 언어를 어지럽히고 도움이 필요합니다. 첫 번째와 두 번째를 서로 바꿔주는 스왑 함수를 만들고 싶습니다. 따라서 (교환 (a b c d e g)) (b a d c e g)을 반환해야하는 경우. 나는 그것을하는 어떤 가치든지 저장하고 싶지 않다. 체계 안에 그것을하는 기능 또는 방법 있는가? 나는 (D 'E)'C 'DEFINE 목록 1 (LIST'는 'b)는 다음프로그래밍에서 요소를 교환하고 싶습니다
하지 않도록이 간계가있다
저는 언어를 어지럽히고 도움이 필요합니다. 첫 번째와 두 번째를 서로 바꿔주는 스왑 함수를 만들고 싶습니다. 따라서 (교환 (a b c d e g)) (b a d c e g)을 반환해야하는 경우. 나는 그것을하는 어떤 가치든지 저장하고 싶지 않다. 체계 안에 그것을하는 기능 또는 방법 있는가? 나는 (D 'E)'C 'DEFINE 목록 1 (LIST'는 'b)는 다음프로그래밍에서 요소를 교환하고 싶습니다
하지 않도록이 간계가있다
무엇을 할
같은 목록을 정의한다면 나는 아무 생각이 없다 한 번에 두 개의 요소를 처리하고 그들을 교체하고 재귀에서 두 개의 요소를 전진시킵니다.
(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 '())
=> '()
오, 죄송합니다. 의견을 주셔서 감사합니다. 많이 도와 줬어. 나는 타이핑으로 코드를 가진 사람들을 결코 이해하지 못한다. 그러나 당신은 훌륭한 일을했다. –
나는 할 것이다. 실제로 또 다른 질문입니다. cond가 null 인 경우는? (cdr lst)))는 목록에서 첫 번째 요소를 꺼내 다음 2를 넣는 것을 의미합니까? 그리고 cadr은 실제로 무엇을합니다. 또한 [email protected]에서 이메일을 보낼 수 있다면 괜찮을까요? –
목록에 홀수 개의 요소가있는 경우'(null? (cdr lst)) '를 물어야합니다. 그 경우 마지막 (단일) 요소를 바꿀 수 없기 때문입니다. '(cadr x)'는'(car (cdr x))'의 줄임말이고,'(cdr x)'는'(cdr (cdr x))'의 줄임말입니다. 미안하지만 이메일로 질문에 답하지 않습니다. –
http://stackoverflow.com/questions/13564575/swap-two-elements-in-list-in-scheme –
내가 원하는 것을하지 이잖아. –
그건 도움이되지 않습니다. –