最大值中是否存在分裂的逆转?连接功能?

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 值(而不是打印到标准输出)