最大值中是否存在分裂的逆转?连接功能?
Is there a reverse of split in maxima? A join function?
我正在搜索一个名为 join
的许多其他语言的函数。它的作用与 split
的相反。
我希望 str_join(split("1;2", ";"), ";")
会变成 "1:2"
我不确定它是否存在,但你可以这样定义它:
str_join(list, delim) := block(
if length(list) = 0 then return (""),
lreduce(
lambda(
[p,c],
if not(stringp(p)) then p: string(p),
if not(stringp(c)) then c: string(c),
concat(p, delim, c)
),
list
)
);
我认为您可以通过 printf
中的 ~{
~}
(输出迭代)构造获得您想要的效果。另请注意,我也使用了 ~^
(从迭代中逃脱)构造。
(%i5) printf (true, "~{~a~^:~}~%", [1,2,3,4]);
1:2:3:4
(%o5) false
? printf
就不细说了。但是 printf
的输出控制运算符是直接从 Common Lisp 借来的,因此您可以在 CL Hyperspec 中找到相关信息。参见:http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm
编辑:您可以通过 printf(false, ...)
.
获取字符串作为 return 值(而不是打印到标准输出)
我正在搜索一个名为 join
的许多其他语言的函数。它的作用与 split
的相反。
我希望 str_join(split("1;2", ";"), ";")
会变成 "1:2"
我不确定它是否存在,但你可以这样定义它:
str_join(list, delim) := block(
if length(list) = 0 then return (""),
lreduce(
lambda(
[p,c],
if not(stringp(p)) then p: string(p),
if not(stringp(c)) then c: string(c),
concat(p, delim, c)
),
list
)
);
我认为您可以通过 printf
中的 ~{
~}
(输出迭代)构造获得您想要的效果。另请注意,我也使用了 ~^
(从迭代中逃脱)构造。
(%i5) printf (true, "~{~a~^:~}~%", [1,2,3,4]);
1:2:3:4
(%o5) false
? printf
就不细说了。但是 printf
的输出控制运算符是直接从 Common Lisp 借来的,因此您可以在 CL Hyperspec 中找到相关信息。参见:http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm
编辑:您可以通过 printf(false, ...)
.