用列表中的单词替换数字

时间:2012-10-18 11:52:45

标签: list recursion lisp

我试图用一个单词替换所有列表的数量,并将这些单词保留为原始:例如:(垃圾邮件'(我吃了1,他也吃了1))输出:我吃了食物,他也吃了食物。在我的函数中,如果列表为空,我首先检查基本情况。 然后我递归地检查列表中的字符,如果它们是数字,则将它们转换为某些单词食物。最后我检查字符是否是字符保留它。即使我认为逻辑是正确的,代码也不起作用并给出错误。所以这是我的代码

(defun spam(list)
    (if (null list) nil
        (if (first numberp list) 'food (spam(rest list))
            ((first list)(spam(rest list)))
        )
    )
) 

3 个答案:

答案 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的其他分支。