æååãã¼ãã使ãã
ããã°ã©ãã³ã°è¨èª Scheme ã«ããã¦å°ãæ°ã«ãªã string-append
ã®ä½¿ãæ¹ã®äºä¾ãè¦ãã
ããã¯ãç§ã以åã« append
ãæ°ã«ãªãã¨ãã¦è¨äºã«ããäºä¾ã¨ããä¼¼ã¦ããã å³ãæãã®ãé¢åãªã®ã§ããããã¦è§£èª¬ã¯ããªããã空éçã«ãé度çã«ãæ¬æ¥ãªã O(n) ã®ãªã¼ãã¼ã§åºæ¥ãã¯ãã®å¦çã O(n2) ã«ãã¦ããã¨ããæå³ã§åãã§ããã è¦ããã«ç¡é§ãªä¸éç¶æ
ãä½ã£ã¦ããã®ã ã (注æï¼å¦çç³»ãæååã®å®è£
ã« rope ãªã©ã使ã£ã¦ããå ´åã¯ãããªã«å·®ã¯çããªãã ããã§ã¯ç´ æ´ãªå¦çç³»ãåæã¨ãã¦ããããä¸è¦ãã¦éå¹çãªã³ã¼ãã«è¦ãã¦ãå¦çç³»ã«ãã£ã¦ã¯å¹ççãªå ´åãããã)
R5RS ã®ç¯å²å
ã§å¹³åçã«æ§è½ãè¯ãæ¹æ³ã¯ããããçµåãã¹ãæååããªã¹ãã«ã¾ã¨ãã¦ããä¸æ°ã« string-append
ã§çµåããæ¹æ³ã ã¨æãã (æ«å°¾å帰ã«ããã¨ãã£ã¨ãããããããªãã)
(define (string-join-with-infix-and-newline string-list delim) (apply string-append (if (null? string-list) '() (letrec ((a (lambda(x) (if (null? x) '("\n") (cons delim (b x))))) (b (lambda(x) (cons (car x) (a (cdr x)))))) (cons (car string-list) (a (cdr string-list)))))))
ãã¦ããããããæ¬é¡ã®æååãã¼ãã®ç´¹ä»ã§ããã ããå¦çç³»ãæååãã¼ãããµãã¼ããã¦ãããªãããã使ããã æååãã¼ã㯠SRFI-6 (Basic String Ports) ã¨ãã¦ææ¡ããã Script-Fu ãå«ãå¤ãã®å¦çç³»ã§æ¡ç¨ããã¦ããã R6RS ã R7RS ã§ã¯ä»æ§èªä½ã«åãè¾¼ã¾ããã (R6RS ã®æååãã¼ã㯠SRFI-6 ã¨ã¯ä½¿ãæ¹ãç°ãªããã¨ã«æ°ãã¤ãããã¨ã)
ä¸è¿°ã®ã³ã¼ããæååãã¼ãã使ã£ã¦æ¸ãæããã¨ãã®ããã«ãªãã
(define (string-join-with-infix-and-newline string-list delim) (if (null? string-list) "" (let ((port (open-output-string))) (display (car string-list) port) (for-each (lambda(x) (display delim port) (display x port)) (cdr string-list)) (newline port) (get-output-string port))))
ãããããã¡ã¤ã«ã«åºåããã®ã¨åããããªæ¸ãæ¹ã§æååãã¼ãã«èç©ãã¦ãæå¾ã«æååã¨ãã¦åãåºãã¨ããæä½ã§æååãæ§ç¯ããã I/O ã¨å ±éã®æä½ã§æååæ§ç¯ãã§ããã¨ããã®ã¯ã¨ã¦ã使ãåæãããããä¸è¬çã«ã¯æ§è½ãããã Scheme ã§æååã®å¦çãããã«ã¯æååãã¼ãã¯ãªãã¦ã¯ãªããªããã®ã ã¨ç§ã¯æãã¦ããã
Document ID: 11a193e8d0f408bb591f09f17be3c315