我有一组名为“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 被认为是不好的风格,应该尽可能避免。
提前致谢!