【发布时间】:2010-02-03 00:13:25
【问题描述】:
在这个StackOverFlow question 中,我创建了一个员工数据库并提供了一个select-by-first 功能。如果字符串/符号的任何部分匹配,我如何编写一个 select-by-first-pattern 来返回记录?
(按第一个模式选择'ev);返回所有包含“ev”的记录(例如史蒂夫)这是构建数据库所需的代码:(更新:包括建议的解决方案)
(需要'cl) (defvar *emp-db* 无) (defun add-record (emp) (push emp *emp-db*)) (defstruct 员工年龄名字姓氏性别儿童) (add-record (make-employee)) (add-record (make-employee :age 34 :姓氏'法夸尔森 :名字'爱丽丝 :sex '女性)) (add-record (make-employee :age 43 :last-name '工作 :first-name '史蒂夫 :性别男)) (add-record (make-employee :age 53 :姓氏'鲍尔默 :first-name '史蒂夫 :性别男)) (defun select-by-first (first-name) (删除,如果不是 #'(lambda (员工) (等于 (employee-first-name employee) firstname)) *emp-db*)) ;; ---------- 下面回答 ---------- ;; (defun select-by-first-pattern (first-name) (删除,如果不是 #'(lambda (员工) (if (string-match first-name (symbol-name (employee-first-name employee))) t nil)) *emp-db*)) (打印(按第一个模式选择“al”));返回爱丽丝的记录 (print (select-by-first-pattern "ev"));返回两个史蒂夫的记录 (打印(按第一个模式选择“ee”));返回零【问题讨论】:
-
Common Lisp 有一个函数 STRING。对于符号,它返回名称,对于字符串,它返回字符串。
标签: elisp common-lisp