我试图用一个单词替换所有列表的数量,并将这些单词保留为原始:例如:(垃圾邮件'(我吃了1,他也吃了1))输出:我吃了食物,他也吃了食物。在我的函数中,如果列表为空,我首先检查基本情况。 然后我递归地检查列表中的字符,如果它们是数字,则将它们转换为某些单词食物。最后我检查字符是否是字符保留它。即使我认为逻辑是正确的,代码也不起作用并给出错误。所以这是我的代码
(defun spam(list)
(if (null list) nil
(if (first numberp list) 'food (spam(rest list))
((first list)(spam(rest list)))
)
)
)
答案 0 :(得分:2)
CL-USER > (subst-if 'food #'numberp '(i ate 1 and he ate 1 too))
(I ATE FOOD AND HE ATE FOOD TOO)
答案 1 :(得分:2)
在原始函数中,第二个条件应为
(if (numberp (first list) ...
不
(if (first numberp list) ...
答案 2 :(得分:1)
而不是'food (spam (rest list))
,您需要(cons 'food (spam (rest list)))
。同样适用于if
的其他分支。