我正在尝试编写一个函数来比较 Common Lisp 中的两个列表。
符号“&”表示任何元素序列,符号“$”表示任何单个元素。
(defun match (filter data)
(cond
((atom filter) (eq filter data))
((atom data) NIL)
((eq (car filter) '|$|)
(match (cdr filter) (cdr data)))
((eq (car filter) '|&|)
(cond
((match (cdr filter) data))
(data (match filter (cdr data)))))
((match (car filter) (car data))
(match (cdr filter) (cdr data)))))
Run Code Online (Sandbox Code Playgroud)
工作正常:
(match '(a b c) '(a b c)) ; => T
(match '(a $ c) '(a b c)) ; => T
(match '(a ff c) '(a b c)) ; …Run Code Online (Sandbox Code Playgroud)