getf可以用于比较而不是eq吗?(常见的lisp)

Mik*_*012 5 common-lisp

我想知道是否有一种方法可以强制getf使用相等而不是eq进行比较?我正在使用常见的lisp的ccl实现.

Xac*_*ach 4

不,你必须使用不同的函数;大约像这样的东西可能会满足您的需要:

(defun equal-getf (plist indicator)
  (second (member indicator plist :test #'equal)))
Run Code Online (Sandbox Code Playgroud)

编辑

这是一个固定版本,它将列表正确地视为键/值对:

(defun equal-getf (plist indicator)
  (loop for key in plist by #'cddr
        for value in (rest plist) by #'cddr
        when (equal key indicator)
        return value))
Run Code Online (Sandbox Code Playgroud)