0

私はリストのすべての番号を単語に置き換えて、単語を元の状態に保とうとしています。たとえば、(スパム'(私は1を食べ、彼も1を食べました))出力:私は食べ物を食べ、彼も食べ物を食べました。私の関数では、最初にリストが空かどうかの基本ケースを確認します。次に、リスト内の文字を再帰的にチェックし、それらが数字である場合は、たとえば、それらを単語の食べ物に変換します。そして最後に、文字が文字であるかどうかを確認します。ロジックは正しいと思いますが、コードが機能せず、エラーが発生します。これが私のコードです

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

3 に答える 3

2

元の関数では、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 に答える