我想转换("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) 在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中.
如果此功能不在语言中,那么是否有人可以使用任何可以完成相同操作的酷函数或宏?
我想将s-表达式转换为带有前缀符号的字符串format。如何使用来完成format?
例;
(format t "<insert format controls here>" (1 2 3) '*)
=> "1 * 2 * 3"
Run Code Online (Sandbox Code Playgroud) 我需要生成一个带有可变字符串长度的带空格的字符串。不太聪明的解决方案涉及以下内容的嵌套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形成了内部格式字符串之后,应该继续实际使用它。我想念什么吗?
假设您有一个列表列表,例如'(("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)