2010-11-28 17 views
1

Ich habe diesen Code:Wie macht man diese Nachbarfunktion?

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

ich nicht herausfinden kann, wie die genneighbors Funktion codieren. Wie greife ich auf ein Element (2 | 1) Slots vor gap Wie generiere ich alle vier möglichen Nachbarn? Kann mir jemand ein paar Hinweise geben?

+0

Sind das Hausaufgaben? Aus dem Code und dem Beispiel lässt sich schwer ableiten, was die Funktionen tun sollen, welchen Input sie akzeptieren sollen und welchen Output sie generieren sollen. 'heuristic' ist beispielsweise ein generischer Name. Interessanter wäre, was für eine Heuristik es ist. –

Antwort

3

Alle Funktionen der CLHS-Kapitel conses und sequences gelten für Listen.

Beachten Sie auch, dass es aus verschiedenen Gründen gut ist, globale Variablen wie folgt zu benennen: * bc *, * fc * und * gap *.

Beachten Sie auch, dass in neueren Code häufig anstelle von CDR statt CAR und REST FIRST verwendet wird.