相关疑难解决方法(0)

在列表中连接字符串的规范方法是什么?

我想转换("USERID=XYZ" "USERPWD=123")"USERID=XYZ&USERPWD=123".我试过了

(apply #'concatenate 'string '("USERID=XYZ" "USERPWD=123"))
Run Code Online (Sandbox Code Playgroud)

将返回""USERID=XYZUSERPWD=123".

但我不知道如何插入'&'?以下功能有效但似乎有点复杂.

(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)))))
Run Code Online (Sandbox Code Playgroud)

common-lisp

23
推荐指数
3
解决办法
5710
查看次数

使用命名参数的Lisp字符串格式

在Lisp中有没有办法使用命名参数格式化字符串?

也许像关联列表那样的东西

(format t "All for ~(who)a and ~(who)a for all!~%" ((who . "one")))
Run Code Online (Sandbox Code Playgroud)

为了打印"All for one and one for all".

类似于这个python问题,或者这个scala,甚至是c ++,但是在Lisp中.

如果此功能不在语言中,那么是否有人可以使用任何可以完成相同操作的酷函数或宏?

lisp common-lisp string-formatting

12
推荐指数
1
解决办法
593
查看次数

打印带有中缀符号的列表

我想将s-表达式转换为带有前缀符号的字符串format。如何使用来完成format

例;

(format t "<insert format controls here>" (1 2 3) '*)
=> "1 * 2 * 3"
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp

3
推荐指数
2
解决办法
77
查看次数

在Common Lisp FORMAT中,递归格式如何工作

我需要生成一个带有可变字符串长度的带空格的字符串。不太聪明的解决方案涉及以下内容的嵌套format

(format nil (format nil "~~~d,,a" 10) "asdf")
Run Code Online (Sandbox Code Playgroud)

现在,我想让它更聪明一点使用format~?递归处理。我希望这样的事情可以满足我的要求:

(format nil "~@?" "~~~d,,a" 10 "asdf")
Run Code Online (Sandbox Code Playgroud)

但是我得到的只是格式字符串,即~10,,a不是填充asdf字符串。也许我在这里误解了“递归”一词,但是我希望CL形成了内部格式字符串之后,应该继续实际使用它。我想念什么吗?

format common-lisp

2
推荐指数
1
解决办法
220
查看次数

Common Lisp:Zip任意数量的列表

假设您有一个列表列表,例如'(("abc" "def" "ghi") ("012" "345" "678") ("jkl" "mno" "pqr"))'(("ab" "cd" "ef") ("01" "23" "45")).

压缩给定列表中列表的规范方法是什么?即如何func定义如此

(func '(("ab" "cd" "ef") ("01" "23" "45")) :sep "|" :combiner #'concat) 
  ;; => ("ab|01" "cd|23" "ef|45")

(func '(("abc" "def" "ghi") ("012" "345" "678") ("jkl" "mno" "pqr")) ...)
  ;; => ("abc|012|jkl" "def|345|mno" "ghi|678|pqr")
Run Code Online (Sandbox Code Playgroud)

哪个concat := (lambda (args) ...)是组合各个列表的头部的功能.

据推测,这种类型的操作被称为旋转zipMany(根据不同语言的相关问题的答案).

我有类似的东西(双apply)

(apply #'mapcar #'(lambda (&rest args) (apply #'concatenate 'string args)) lst) …
Run Code Online (Sandbox Code Playgroud)

functional-programming common-lisp

1
推荐指数
2
解决办法
263
查看次数