Lisp 如何使这个邻居发挥作用?

Lisp 如何使这个邻居发挥作用?,lisp,common-lisp,Lisp,Common Lisp,我有以下代码: (defparameter fc #\F) (defparameter bc #\B) (defparameter gap #\G) (defun solp (seq) (if (eql fc (car seq)) (not (if (listp (cdr seq)) (find bc (cdr seq)) (eql seq bc))) (solp (cdr seq)))

我有以下代码:

(defparameter fc #\F)
(defparameter bc #\B)
(defparameter gap #\G)

(defun solp (seq)
    (if (eql fc (car seq))
        (not (if (listp (cdr seq))
                 (find bc (cdr seq))
                 (eql seq bc)))
        (solp (cdr seq))))

(defun heuristic (seq &optional (f 0)) 
    (if (eql nil seq) 
        0   
        (if (eql bc (car seq))
            (+ f (heuristic (cdr seq) f)) 
            (heuristic (cdr seq) (+ f 1)))))

(defun genneighbors (seq)

    ;seq == (fc fc gap bc bc) ===> neighbors == ( (gap fc fc bc bc)
    ;                                              (fc gap fc bc bc)
    ;                                               (fc fc bc gap)
    ;                                               (fc fc bc bc gap) )
    ;I can't figure out how to do this
)

我不知道如何编写
genneights
函数。如何在
gap
之前访问元素(2 | 1)插槽,如何生成所有四个可能的邻居?有人能给我一些指点吗

CLHS章节中的所有函数都适用于列表

还要注意,将全局变量命名为:*bc*、*fc*和*gap*是一种很好的编程风格(出于各种原因)


还要注意的是,在较新的代码中,经常使用FIRST代替CAR,REST代替CDR。

这是家庭作业吗?从代码和示例中,很难推断函数应该做什么、应该接受什么输入以及应该生成什么输出。”例如,“启发式”是一个通用名称。更有趣的是这是一种什么样的启发。