我有一个练习来获得一个嵌套列表,并用一个“有趣”的单词替换每个单词。我们得到了一个什么是“有趣”字的声明。
我写了这段代码
(defun funny_nestes (nested_l)
(cond ((null nested_l) "")
((atom (car nested_l))
(cons (funnyw (car nested_l))
(funny_nestes (cdr nested_l))))
(t (cons (funny_nestes (car nested_l))
(funny_nestes (cdr nested_l))))))
当'funnyw'是返回“有趣”字样的函数时。
如果我跑
(FUNNY_NESTES '(ata (she lamadta be JCT) oved be NDS))
我得到了
("AbATAbA " ("SHEbE " "LAbAMAbADTAbA " "BEbE " "JCT " . "")
"ObOVEbED " "BEbE " "NDS " . "")
我希望得到
(AbATAb (SHEbE LAbAMAbADTAbA BEbE JCT) ObOVEbED BEbE NDS )
我该如何解决?我怎么能用lambda做到这一点?
答案 0 :(得分:0)
'我怎么能用lambda做到这一点?'什么意思'做lambda'?
为什么代码中有空字符串?
如果您想要符号而不是字符串,则需要将字符串转换为符号。
答案 1 :(得分:0)
我会在黑暗中捅,假设这是被问到的:
(defun replace-with-gibberish (modifier words)
(cond
((null words) nil)
((consp (car words))
(cons (replace-with-gibberish modifier (car words))
(replace-with-gibberish modifier (cdr words))))
(t (cons (funcall modifier (car words))
(replace-with-gibberish modifier (cdr words))))))
(replace-with-gibberish
#'(lambda (x)
(intern
(coerce
(mapcan #'list
(coerce (symbol-name x) 'list)
(coerce
(make-string
(length (symbol-name x))
:initial-element #\b) 'list)) 'string)))
'(ata (she lamadta be JCT) oved be NDS))
我可以从您显示的结果中推断出来。但是,你应该知道如果你想摆脱符号周围的管道 - 你需要使用大写字母为符号生成乱码。 (默认情况下,符号名称为大写,如果需要包含小写字母,则需要对其进行转义)。
你的问题的问题在于你基本上得到了你发布的功能,但你没有发布的功能似乎是错误的(搞笑)。我继续前进,并假设你想用任何函数替换它 - 这就是为什么这个例子。