lisp - 在 Common Lisp 中为字符串交替大写/小写

标签 lisp common-lisp

我想编写一个函数,该函数将返回一个在 Common Lisp 中使用替代大写/小写格式化的字符串。例如,输入“stackoverflow”应返回字符串“StAcKoVeRfLoW”。这是我的尝试,但它只返回一个缺点对列表。我在正确的轨道上吗?

(defun mockify (chars)
  (let ((lst (coerce chars 'list)))
    (if (equal lst nil) nil
        (coerce (cons
                 (cons (char-upcase (car lst)) (char-downcase (cadr lst)))
                      (mockify (cddr lst)))
                'string))))

CL-USER> (mockify "meow")
((#\M . #\e) (#\O . #\w))

最佳答案

使用 MAP :我们正在创建一个新字符串,基于交替的 bool 变量移动原始字符串和大写/小写。

CL-USER 353 > (let ((string "stackoverflow")
                    (upcase t))
                (map (type-of string)
                     (lambda (element)
                       (prog1 (if upcase
                                  (char-upcase element)
                                (char-downcase element))
                         (setf upcase (not upcase))))
                     string))
"StAcKoVeRfLoW"

关于lisp - 在 Common Lisp 中为字符串交替大写/小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68036136/

相关文章:

list - Lisp:如何使用 let 函数将 2 个列表合并为 1 个列表?

concurrency - 如何将当前线程的绑定(bind)传递给另一个线程?

LISP 变量交换

lisp - 如何在 LISP 中将算术运算符作为函数参数传递?

lisp - 什么时候在Lisp中使用'(或引用)?

lisp - ECL 如何在可执行文件中包含 ASDF 依赖项?

scheme - 理解Scheme中的表达式

lisp - 预定义全局变量的词法绑定(bind)

lisp - 循环遍历字符串

lisp - 使用 hunchentoot 我无法生成网页