2010-12-13 2 views
1

나는 Lisp에서 quicksort를하는 데 어려움이 있습니다.빠른 정렬에 대한 하위 목록 재구성

내 목표는 다음 목록은 0 또는 1 요소가 포함

경우, 이미 정렬됩니다. 그렇지 않으면 다음과 같이 정렬합니다. 먼저 목록의 첫 번째 요소 인 피벗을 가져옵니다. 이제 DOLIST를 사용하여 나머지 목록을 살펴보고 각 요소를 피벗과 비교하십시오. 요소가 피벗보다 작거나 같으면 왼쪽 하위 목록에 배치하고, 그렇지 않으면 CONS 또는 APPEND를 사용하여 오른쪽 하위 목록에 배치합니다. 그런 다음 Qsort를 호출하여 왼쪽 하위 목록과 오른쪽 하위 목록을 정렬합니다. 마지막으로 왼쪽 하위 목록, 피벗 및 오른쪽 하위 목록을 하나의 정렬 된 목록에 결합합니다.

(defun qsort (x) 
    (if (>= 1 (length x)) 
     (format t"~%~s is already sorted" x) 

     ((let (pivot (first x)) 
     (dolist (i x) 
      (if (>= pivot (nth i x)) 
       (list y (nth i)) 
       (list z (nth i)))) 
     (appned y z))))) 

아직 내가

심하게 형성 람다를 얻어서 벽에 충돌하는 것 :

내 코드입니다 ((PIVOT LET (FIRST X)) (DOLIST (IX의 PIVOT) (IFOP (> = PIVOT (NTH IX)) (리스트 피벗 (NTH I)) (리스트 피벗 (NTH I)))))

컴파일러에서.

도와 주시면 감사하겠습니다. 고맙습니다.

답변

1

왜 LET 주변에 두 개의 괄호가 있습니까?

바인딩 주위에 LET 안의 괄호가없는 이유는 무엇입니까?

왜 (nth i x)를 부르시겠습니까? 왜 내가?

NTH를 하나의 인수로 호출하는 이유는 무엇입니까?

어떤 기능이 APPNED입니까? 그 이름의 기능은 없습니다.

(> X = 1)이다 (plusp의 X)

더 ...

관련 문제