qjchen 发表于 2011-12-15 15:36:24

[飞马小讨论] 如何实现将一个字符串表,连接成一个带空格连接的字符串

本帖最后由 qjchen 于 2011-12-15 15:43 编辑

一个小小的讨论题,昨天我在完成这个小函数的时候,写了一段代码,有点冗长,后来朋友给了一段有趣的代码,挺短的。

在这里抛砖引玉一下,希望各位有兴趣参加,说不定结果会更好。

讨论问题:

strlst=("a" "b" "c" "d" "e"....) ,一个数量未名的字符串表

请写一段代码,将之变为 res="a b c d e"(以5个元素的表为例,余同),代码当然是越短越好,要是能一行就更好了:)

,不妨参与一下吧

ziyouwzb 发表于 2023-10-22 19:36:15

感谢各位高手分享。

santalin 发表于 2011-12-15 15:39:40

本帖最后由 santalin 于 2011-12-15 15:40 编辑

(setq str "")
(foreach x strlst(setq str (strcat str x " ")))
(princ str)

ZZXXQQ 发表于 2011-12-15 16:27:11


(setq str (car strlst))
(princ (foreach x (cdr strlst) (setq str (strcat str " " x))))

xshrimp 发表于 2011-12-15 17:37:31

本帖最后由 xshrimp 于 2011-12-15 21:42 编辑

预留一个.下班了.回家写一个.
(substr(apply 'strcat(mapcar '(lambda(s)(strcat" "s))strlst))2)

Gu_xl 发表于 2011-12-15 18:56:51

本帖最后由 Gu_xl 于 2011-12-15 19:06 编辑

(strcat (car lst) (apply 'strcat (mapcar '(lambda (x) (strcat " " x)) (cdr lst))))

如果要考虑lst可能为nil时可添加一个判断:
(if lst
    (strcat (car lst) (apply 'strcat (mapcar '(lambda (x) (strcat " " x)) (cdr lst))))

)

nzl1116 发表于 2011-12-15 19:30:44

(vl-string-subst "" ")" (vl-string-subst "" "(" (vl-princ-to-string (mapcar 'read '("a" "b" "c")))))(vl-string-subst "" ")" (vl-string-subst "" "(" (vl-princ-to-string (mapcar 'read '("a" "b" "c")))))

yjr111 发表于 2011-12-15 20:04:08

(setq strlst(vl-string-trim "()"(vl-princ-to-string (mapcar 'readstrlst)))

nzl1116 发表于 2011-12-15 20:21:37

有点遗憾,字母全大写了
(vl-string-trim "( )" (vl-list->string (subst 32 34 (vl-string->list
(vl-prin1-to-string '("a" "b" "c" "d"))))))
这样空格又太多了

caoyin 发表于 2011-12-15 20:37:22

(vl-string-trim "()"(vl-princ-to-string strlst))

qjchen 发表于 2011-12-15 21:06:23

本帖最后由 qjchen 于 2011-12-15 21:18 编辑

非常感谢各位的热情参与~~~,让我大开眼界~~
我开始的做法也是用foreach,后来为了用apply就用了比较长的语句。朋友的代码和xshrimp和gu版主的类似。(substr (apply 'strcat (mapcar '(lambda(x) (strcat " " x)) strlst)) 2)
以上好几位朋友的做法都很好,我来逐个学习一下。谢谢各位,金币不多,在此贴之前的各位网友每人一些,谢谢~~



页: [1] 2
查看完整版本: [飞马小讨论] 如何实现将一个字符串表,连接成一个带空格连接的字符串