Scheme - string-append两个字符串列表

问题描述 投票:1回答:4

我试图附加两个字符串列表

但我不知道如何在两个单词之间添加空格。

(define (string-concat lst1 lst2)
        (map string-append lst1 lst2)
)
(string-concat '("elementary") "(school))

然后结果为“小学”

如何在合并时添加空间?我已经尝试过使用lambda,但是它不起作用

(map string-append (cdr (append* (map (lambda (x) list " " x)) lst1)) lst2)
scheme racket
4个回答
2
投票

使用add-between在字符串之间添加put空格:

> (add-between '("This" "and" "that") " ")
'("This" " " "and" " " "that")

要在列表中追加字符串,请使用string-append*

> (string-append* '("This" " " "and" " " "that"))
"This and that"

你的功能变成:

 (define (string-concat lst1 lst2)
     (string-append* (add-between (append lst1 lst2) " ")))

其中append用于将两个列表合并为一个。


1
投票

你可以简单地在两个字符串之间添加一个空格,string-append接受多个参数:

(string-append "hello" " " "world")
=> "hello world"

或者你可以使用string-join

(string-join '("hello" "world"))
=> "hello world"

现在,将其扩展为字符串列表:

(map (lambda (s1 s2) (string-append s1 " " s2))
     '("a" "b" "c")
     '("1" "2" "3"))
=> '("a 1" "b 2" "c 3")

(map (lambda (s1 s2) (string-join (list s1 s2)))
     '("a" "b" "c")
     '("1" "2" "3"))
=> '("a 1" "b 2" "c 3")

1
投票

另一种方法是使用match

#lang racket

(define (add-between sep xs)
  (match xs
    ;; at least two items
    ((list a b rest ...)
     (string-append a sep (add-between sep (cons b rest))))

    ;; one item
    ((list a)
     a)

    ;; no items
    (null "")))

(add-between "~" '())                ;; ""
(add-between "~" '("a"))             ;; "a"
(add-between "~" '("a" "b"))         ;; "a~b"
(add-between "~" '("a" "b" "c"))     ;; "a~b~c"
(add-between "~" '("a" "b" "c" "d")) ;; "a~b~c~d"

0
投票

如果要追加多个字符串,请不要使用字符串追加。

使用with-output-to-string

#lang racket

(define (string-concat lst1 lst2)
  (with-output-to-string
    (lambda ()
      (map
       (lambda (item1)
         (printf "~a " item1))
       lst1)
      (map
       (lambda (item2)
         (printf "~a " item2))
       lst2))))

(string-concat '("cat" "kitten") '("dog" "puppy"))

结果:

"cat kitten dog puppy "
© www.soinside.com 2019 - 2024. All rights reserved.