相关疑难解决方法(0)

是否有将字符串连接到分隔字符串的函数?

在Emacs Lisp中是否有与之相反的函数,即将split-string列表的元素连接到由给定分隔符分隔的字符串中?换句话说,是否存在给定列表的函数,例如("foo" "bar" "baz"),和分隔符,例如", ",将该列表作为由该分隔符分隔的字符串返回,例如"foo, bar, baz".

Common Lisp似乎有这样的功能,但Emacs Lisp中具有相同名称的函数format是一个完全不同的函数.

elisp

24
推荐指数
4
解决办法
6238
查看次数

Common-Lisp以函数格式打印制表符

我希望用format函数打印制表符.我可以实现这一点,~C然后#\tab作为格式的参数放置,但这似乎有点冗长,因为新行可以简单地~%在字符串中放置一个.

  • 使用该format功能打印标签最常用的做法是什么?

感谢您的帮助!

format tabs common-lisp

7
推荐指数
1
解决办法
3250
查看次数

具有cl:格式的列表中每隔三个单词后的换行符

如何~%在列表中的每三个参数后添加回车符(使用)?
我现在有:

(format nil "~{~a ~}" (list '"one" '"two" '"three" '"four" '"five" '"six" '"seven" '"eight" '"nine" '"ten"))  
;=> "one two three four five six seven eight nine ten " 
Run Code Online (Sandbox Code Playgroud)

但我想:

;=> "one two three  
; four five six  
; seven eight nine  
; ten "  
Run Code Online (Sandbox Code Playgroud)

lisp format common-lisp

5
推荐指数
1
解决办法
379
查看次数

在common-lisp中更好的pythonic`join`

在Edi Weitz的cl cookbook中,对于pythonic join,建议使用此功能:

(defun join (separator list)
  (with-output-to-string (out)
    (loop for (element . more) on list
          do (princ element out)
          when more
            do (princ separator out))))
Run Code Online (Sandbox Code Playgroud)

然而,不知何故,我在思考,必须有一种方式以join另一种方式表达,也许使用format的能力......

在Seibel的书中,(在章节中format)我们发现将列表中的字符串连接到带有分隔符的单个字符串 ", ":

(defvar l '("a" "b" "c"))

(format nil "~{~A~^, ~}" l)
;; "a, b, c"
Run Code Online (Sandbox Code Playgroud)

这是一个pythonic连接,非常简洁; 该~^指令使得", "只添加到最后一个元素之前,并且在没有元素跟随时添加.

但是,这里,分隔符字符串", "是format指令的一部分.

一个棘手的案例是例如(defvar sep #\Tab).如果sep的表示"#\Tab"可以在此格式指令中作为分隔符放置,从而导致:

(format nil "~{~A~^#\Tab~}" l)
Run Code Online (Sandbox Code Playgroud)

我们会达到目标.

显然,必须使用宏来生成格式指令...我尝试了类似的东西,(princ-to-string sep)但这给了 …

lisp metaprogramming common-lisp

4
推荐指数
1
解决办法
181
查看次数

打印带有中缀符号的列表

我想将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: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
查看次数