R5RS Scheme에서 한 번에 여러 매개 변수를 표시하는 방법은 무엇입니까? 내 구현 아래 작동하지만 추가 괄호와 공백을 추가합니다.R5RS Scheme에서 여러 매개 변수를 표시하는 방법
[email protected]:~$ ./Template.ss
(I have a lovely bunch of coconuts
)
R5RS Scheme에서 한 번에 여러 매개 변수를 표시하는 방법은 무엇입니까? 내 구현 아래 작동하지만 추가 괄호와 공백을 추가합니다.R5RS Scheme에서 여러 매개 변수를 표시하는 방법
[email protected]:~$ ./Template.ss
(I have a lovely bunch of coconuts
)
간단한에서
#!/usr/bin/env racket
#lang r5rs
(define (display-all . rest) (display rest))
(display-all "I " "have " "a " "lovely " "bunch " "of " "coconuts\n")
결과 :
(define (display-all . vs)
(for-each display vs))
주 for-each
대신 map
의 사용 - 같은 일이지만, 당신은 단지 측 함수를 호출하고 가정 for-each
효과가 있으므로 결과 목록을 반환하는 대신 map
을 display
과 void
의 목록을 반환합니다.) 그냥 void를 반환합니다.
문자열이 아닌 물건을 표시하고 그 사이에 공백을 넣으려면 예를 들어 (12 개의 "bananas"모두 표시) "12 bananas"문자열을 표시하려면 수동으로 설정해야합니다. 숫자를 문자열에 넣고 공간을 직접 추가하십시오. 단지리스트의 요소 사이에-공간을 추가하는 것이 더 쉽습니다 :
(define (insert-between v xs)
(cond ((null? xs) xs)
((null? (cdr xs)) xs)
(else (cons (car xs)
(cons v (insert-between v (cdr xs)))))))
(define (display-all . vs)
(for-each display (insert-between " " vs)))
지금이 전화 :
(display-all "blah" 4 "bloo")
당신이 무엇을 기대할 않습니다. 공백을 자동으로 삽입하지 않으려면 다른 인수를 분리 자 객체로 지정하고 필요할 경우 사용할 수 있습니다. 여기에 분리 개체를 허용하는 버전입니다 :
(define (display-all sep . vs)
(for-each display (insert-between sep vs)))
당신은 공백이나 빈 문자열이 아니라 하나에 기본 수 있도록, 그러나 선택 및 키워드 인수를 지원 체계의 버전에서 더 나을 이러한 접근 방식 나머지 args를 방해하십시오.
모든 인수가 문자열 인 경우 apply 및 string-append 만 사용하십시오. 둘 다 r5rs에 있습니다
#!/usr/bin/env racket
#lang r5rs
(define (display-all . rest) (display (apply string-append rest)))
(display-all "I " "have " "a " "lovely " "bunch " "of " "coconuts\n")
대단히 감사합니다. 첫 번째 구현 만 사용하면보다 유연 해집니다. 내가 거기에 공간을 원한다면, 거기에 넣을거야. 그러면 또 다시, 아마도 2 차 임프레이션에 대한 사용법을 발견 할 것입니다. 후에. – GlassGhost