Scheme 在重复之间使用空格构建重复字符串

Scheme 在重复之间使用空格构建重复字符串,scheme,racket,Scheme,Racket,repeat接收一个数字和一个字符串,并返回重复n次的字符串,以空格分隔 ;; repeat: number string -> string (define (repeat n str) (replicate n str)) (repeat 2 "home") 给我: "homehome" 我如何添加一个空间,以便它可以给我“家” 在将字符串str传递给replicate之前,在字符串末尾添加一个空格: (replicate n (string-append str " "))

repeat
接收一个数字和一个字符串,并返回重复
n次的字符串,以空格分隔

;; repeat: number string -> string
(define (repeat n str)
  (replicate n str))

(repeat 2 "home")
给我:

"homehome"

我如何添加一个空间,以便它可以给我“家”

在将字符串
str
传递给
replicate
之前,在字符串末尾添加一个空格:

(replicate n (string-append str " "))
这会在结尾留下额外的空间,如果你想摆脱它,请按照@Tobia的建议:

(string-trim (replicate n (string-append str " ")))

在将字符串
str
传递到
replicate
之前,在末尾的字符串
str
中添加一个空格:

(replicate n (string-append str " "))
这会在结尾留下额外的空间,如果你想摆脱它,请按照@Tobia的建议:

(string-trim (replicate n (string-append str " ")))

Racket有一个内置函数字符串连接,所以在普通Racket中

> (string-join (build-list 2 (lambda (i) "home")))
"home home"

Racket有一个内置函数字符串连接,所以在普通Racket中

> (string-join (build-list 2 (lambda (i) "home")))
"home home"

“string append:expected a string作为第一个参数,给定3”是我得到的结果。或者干脆删掉空格:
(string trim(replicate(string append b“”)n))
@Josh看起来参数是颠倒的(我想
n
是重复的次数)。我更新了我的答案,请再试一次。@Tobia:抱歉,我编辑了问题的参数,因为原始参数的名称太混乱了。因此,我将
b
重命名为
n
,并将
n
重命名为
str
'string-append:需要一个字符串作为第一个参数,给定3'就是我要得到的。或者干脆将空格修剪掉:
(string trim(replicate(string append b“”)n))
@Josh看起来参数是颠倒的(我想,
n
是重复的次数)。我更新了我的答案,请再试一次。@Tobia:很抱歉,我编辑了问题的参数,因为原始参数的名称太混乱了。所以我将
b
重命名为
n
,将
n
重命名为
str
。是的,但另一个答案效率更高,因为它没有建立中间列表。这是正确的g、 如果您查找复制的定义,它也使用构建列表(请参阅collects/lang/private/todo.rkt)。是的,但另一个答案更有效,因为它不构建中间列表。这是错误的。如果您查找复制的定义,它也使用构建列表(请参阅collects/lang/private/todo.rkt)。