Как заставить этого соседа работать? - PullRequest
1 голос
/ 28 ноября 2010

У меня есть этот код:

(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.Как получить доступ к слотам элемента (2 | 1) до gap Как создать все четыре возможных соседа?Может кто-нибудь дать мне несколько советов?

1 Ответ

3 голосов
/ 28 ноября 2010

Все функции из глав CLHS содержат и последовательности применяются к спискам.

Также обратите внимание, что это хороший стиль программирования (по разным причинам), чтобы назватьглобальные переменные, такие как: * bc *, * fc * и * gap *.

Также обратите внимание, что в более новом коде часто используют FIRST вместо CAR и REST вместо CDR.

...