小编Nie*_*wig的帖子

Common Lisp - 模式匹配

我正在尝试编写一个函数来比较 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)

clisp functional-programming common-lisp pattern-matching

3
推荐指数
1
解决办法
350
查看次数