在列表中加入字符串的规范方法是什么? [英] What's the canonical way to join strings in a list?

查看:81
本文介绍了在列表中加入字符串的规范方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将( USERID = XYZ USERPWD = 123)转换为 USERID = XYZ& USERPWD = 123 。我尝试了

 (应用#'concatenate'string'( USERID = XYZ USERPWD = 123))

这将返回 USERID = XYZUSERPWD = 123



但是我不知道如何插入'&',下面的函数有效,但是看起来有点复杂。

 (defun join(list& optional(delim&)))
(带有输出到字符串的(s)
(当list
(格式为〜A(第一个列表))
(dolist(元素(其余列表))
(格式为〜A〜A的delim元素))))


解决方案

使用 FORMAT



〜{ 〜} 表示迭代,〜A 表示美学印刷,而<$ c $



<$ c>〜^ (在文档中也称为Tilde Circumflex)表示仅在出现后才打印。 p $ p> *(格式为nil〜{〜A〜^,〜}'(1 2 3 4))

1、2、3、4
*


I want to convert ("USERID=XYZ" "USERPWD=123") to "USERID=XYZ&USERPWD=123". I tried

(apply #'concatenate 'string '("USERID=XYZ" "USERPWD=123"))

which will return ""USERID=XYZUSERPWD=123".

But i do not know how to insert '&'? The following function works but seems a bit complicated.

(defun join (list &optional (delim "&"))
    (with-output-to-string (s)
        (when list
            (format s "~A" (first list))
            (dolist (element (rest list))
               (format s "~A~A" delim element)))))

解决方案

Use FORMAT.

~{ and ~} denote iteration, ~A denotes aesthetic printing, and ~^ (aka Tilde Circumflex in the docs) denotes printing the , only when something follows it.

* (format nil "~{~A~^, ~}" '( 1 2 3 4 ))

"1, 2, 3, 4"
* 

这篇关于在列表中加入字符串的规范方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆