我需要编写一个软件,给定一个字符串列表,返回一个由逗号分隔的输入列表元素串联组成的新字符串。
(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))
这有效,但看起来有点脏。有没有办法以更好的方式编写它,例如避免“如果”?
答案 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)))