合并字符串列表以逗号分隔的字符串

时间:2014-06-05 14:42:19

标签: scheme racket higher-order-functions

我需要编写一个软件,给定一个字符串列表,返回一个由逗号分隔的输入列表元素串联组成的新字符串。

(comma-con (list "a" "b" "c"))  ;=> "a,b,c"

我很乐意编写Scheme惯用代码。

到目前为止,我写了这个:

(define (comma-con l)
   (foldr
         (λ (x y) (if (string? y) (string-append x "," y) x))
         '()
         l))

这有效,但看起来有点脏。有没有办法以更好的方式编写它,例如避免“如果”?

1 个答案:

答案 0 :(得分:4)

尝试使用string-join,它会完全符合您的需要,并且尽可能是惯用语:

(string-join '("a" "b" "c") ",")
=> "a,b,c"

无论如何,如果你想使用 fold 解决问题,这是一个更清晰的解决方案(假设输入列表非空):

(define (comma-con lst)
  (foldl (λ (e acc) (string-append acc "," e))
         (first lst)
         (rest  lst)))