「ip」、「date」、「url」などの名前の関数のセットがあります。
これらを使用して、「ip-is」、「date-is」などの別の関数セットを生成したいと思います。
私はついに次の解決策を手に入れました。それはうまく機能していますが、それは「eval」を使用しています。
(loop for name in '(ip date url code bytes referer user-agent) do
(let ((c-name (intern (concatenate 'string (symbol-name name) "-IS"))))
(eval `(defun ,c-name (c)
#'(lambda (l) (equal (,name l) c))))))
誰かが私を助けてくれますか、「邪悪な評価」を取り除く方法は?私のプログラムでは、関数名がリストとして提供されていることが不可欠です。だから、いくつかのマルクロへの呼び出し
(define-predicate ip)
(define-predicate date)
(define-predicate url)
等
私のニーズに合わないでしょう。「eval」については特に問題はありませんが、evalは悪いスタイルと見なされており、可能であれば避ける必要があることをよく読んでいます。
前もって感謝します!