0

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

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

3 回答 3

2

在原始函数中,第二个条件应为

(if (numberp (first list) ...

不是

(if (first numberp list) ...
于 2012-10-19T15:24:04.050 回答
2
CL-USER > (subst-if 'food #'numberp '(i ate 1 and he ate 1 too))
(I ATE FOOD AND HE ATE FOOD TOO)
于 2012-10-18T12:26:09.223 回答
1

而不是'food (spam (rest list)),你需要(cons 'food (spam (rest list)))。同样对于if.

于 2012-10-18T11:58:07.483 回答