2014-10-24 3 views

답변

2

간단한에서

#!/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 효과가 있으므로 결과 목록을 반환하는 대신 mapdisplayvoid의 목록을 반환합니다.) 그냥 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를 방해하십시오.

+0

대단히 감사합니다. 첫 번째 구현 만 사용하면보다 유연 해집니다. 내가 거기에 공간을 원한다면, 거기에 넣을거야. 그러면 또 다시, 아마도 2 차 임프레이션에 대한 사용법을 발견 할 것입니다. 후에. – GlassGhost

2

모든 인수가 문자열 인 경우 applystring-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") 
+0

Display는 문자열이 아닌 인수를 허용하지만이 버전은 문자열에서만 작동합니다. 여전히 작동하지만 구별하는 것이 중요합니다. – Jack

+0

죄송합니다. 나는 그것을 업데이트 할 것이다. – ymonad

관련 문제