如何使这个邻居功能?

时间:2010-11-28 07:00:47

标签: 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))))

(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
)

我无法弄清楚如何编写genneighbors函数的代码。如何在gap之前访问元素(2 | 1)插槽如何生成所有四个可能的邻居?有人可以给我一些指示吗?

1 个答案:

答案 0 :(得分:3)

CLHS章节consessequences中的所有功能都适用于列表。

另请注意,为此命名全局变量是很好的编程风格(出于各种原因):* bc *,* fc *和* gap *。

另请注意,在较新的代码中,通常使用FIRST而不是CAR和REST而不是CDR。